powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
13 сообщений из 13, страница 1 из 1
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39223880
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день
Есть js клиент - который отправляет мне POST c json объектом
При этом от тела json берется md5 и кладется в заголовок "Content-MD5"

Код: java
1.
{userCode: "4"}



у меня есть контролер и HandlerInterceptorAdapter

как решить две задачи через HandlerInterceptorAdapter

//TODO получить тело запроса взять от него MD5 сравнить с заголовком
//TODO получить тело ответа взять от него MD5 записать в ответ ...

как я понимаю -
HttpServletRequest request, HttpServletResponse response
можно прочитать лишь единожды ...

? как быть чтобы максимально прозрачно добавить заголовки ...?


может есть способ проще? как получить параметр @RequestBody UserCode json?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 @ResponseBody
    @ResponseStatus(value = HttpStatus.OK)
    @RequestMapping(
            value = "/getUserByCode",
            method = {RequestMethod.POST},
            consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_FORM_URLENCODED_VALUE},
            produces = {MediaType.APPLICATION_JSON_VALUE}
    )
    public ResponseEntity<UserProfile> getUserByCode(@RequestBody UserCode json) {
           logger.info(gson.toJson(json));

           UserProfile userProfile = userService.getUserCode(json.getUserCode());
            return new ResponseEntity<>(userProfile,  HttpStatus.OK);



Хочу реализовать HandlerInterceptorAdapter



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class HeaderMD5Interceptor extends HandlerInterceptorAdapter {

    protected final Log logger = LogFactory.getLog(getClass());

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      String contentMD5  = request.getHeader("Content-MD5");
     
      //TODO  получить тело запроса взять от него MD5 сравнить с заголовком 
        logger.info("[" + handler + "]");
        return super.preHandle(request, response, handler); 
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.info("[" + handler + "]");

      //TODO  получить тело ответа взять от него md5
      //  response.setHeader("Content-MD5",UserHelper.getMD5HeaderFromString(body));

        super.postHandle(request, response, handler, modelAndView); 
    }
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39223892
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1//TODO получить тело запроса взять от него MD5 сравнить с заголовком
//TODO получить тело ответа взять от него MD5 записать в ответ ...
не в курсе как там, в интерцепторе. Наверно аналогично фильтру
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

if (servletRequest.getServletPath().equals(........какая нить провекра......) {
        chain.doFilter(request, response); 
	или
	chain.doFilter(new ФФФФФHttpServletRequest(servletRequest) или свой наследник, response);
	return;
}
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39223900
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
https не решит твоих проблем с шифрованием?
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39223949
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1,
https не решит твоих проблем с шифрованием?

Это не для шифрования добавили :) самв шоке ... но хотят такие загловки ... https есть


я правильно понимаю что нужно HttpServletRequestWrapper HttpServletResponseWrapper создать и полностью зачитать в них весь поток и передать его по цепочке ...

вопрос как зачитать HttpServletRequestWrapper HttpServletResponseWrapper и передать со всем заголовками , атрибутами итд ...

еще раз все что мне нужно в двух случаях это получать sha от тела и запихнуть его в заголовок ...

пересоздавать HttpServletRequestWrapper HttpServletResponseWrapper какой-то оверхед ?
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39223960
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
if (servletRequest.getServletPath().equals(........какая нить провекра......) {
        chain.doFilter(request, response); 
	или
	chain.doFilter(new ФФФФФHttpServletRequest(servletRequest) или свой наследник, response);
	return;
}



Это так + там еще фильтр на RequestMethod.POST.toString().equalsIgnoreCase(request.getMethod()))


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
@Configuration
@EnableWebMvc
@EnableScheduling
@ComponentScan({
  ****
})
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
    
    
    @Bean
    HeaderMD5Interceptor headerMD5Interceptor() {
        return new HeaderMD5Interceptor();
    }
    
    @Override
   public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(headerMD5Interceptor())
                .addPathPatterns( "/getUserByCode");

    }
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39223964
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Petro123Atum1,
https не решит твоих проблем с шифрованием?
Это не для шифрования добавили :) самв шоке ... но хотят такие загловки ... https есть
я правильно понимаю что нужно HttpServletRequestWrapper HttpServletResponseWrapper

=== зачем обёртку?

создать и полностью зачитать в них весь поток

===== если JSON в урл, то .GetParametr('парам урл')
если в сыром запросе, то буфферЧтения = request а потом из буфера читаем строки

и передать его по цепочке ...

=== куда? Он же в request остаётся.
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39223967
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Это так + там еще фильтр на RequestMethod.POST.toString().equalsIgnoreCase(request.getMethod()))
ничё не понял.
chain.doFilter и передаёт всем фильтрам по цепочке. Какая разница что там в них?
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39224202
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Request можно прочитать только один раз
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39224213
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Petro123,
Request можно прочитать только один раз
кто сказал?
У меня выше нерабочий код?
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39224469
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

вроде как один раз ... поэтому все пытаются создать велосипед типа
HttpServletRequestWrapper HttpServletResponseWrapper

запихать туда оригинальный HttpServletRequest HttpServletResponse
при этом создав копию тела и возможность ее отдать ...


It can only be read once.

https://gist.github.com/calo81/2071634

а так да

Код: java
1.
String requestBody = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));



но второй раз такое уже не сработает (((
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39224518
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1вроде как один раз ... поэтому все пытаются создать велосипед типа
ОК - проверю.
Ты не уточнил, это ограничение только при чтении через reader?
- вот так параметры брать можно из урл сколько угодно раз?
Код: java
1.
request.getXXXXX и String ыыыыы = request.getParameter("sssss");


?
2. Код выше я тебе дал из рабочего проекта.
Так что, проверю и отпишусь.
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39224660
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
да. Есть такая шняга)), что при чтении "сырого запроса" со стримом - нужно использовать обёртку.
Я грешным делом подумал, что ФФФФФHttpServletRequest - просто для добавки в запрос своих данных.
Но он - public class ФФФФФHttpServletRequest extends HttpServletRequestWrapper {
Ты прав. У меня так:

Код: java
1.
2.
3.
4.
if (servletRequest.getServletPath().equals(........какая нить провекра......) {
	chain.doFilter(new ФФФФФHttpServletRequest(servletRequest), response);
	return;
}


т.е. если ты используешь стрим, то через обёртку. Если нет, то не нужен этот геморрой
Atum1Есть js клиент - который отправляет мне POST c json объектом
При этом от тела json берется md5 и кладется в заголовок "Content-MD5"
это делает клиент? А ты просто по без-ти проверяешь на сервере конт.сумму?
...
У меня SSO и такой цепочкой библиотека через
Код: java
1.
request.getRequestDispatcher("/myservlet").forward(request, response) 


протягивает request внутри классов сервера и решает всё что нужно (SAML протокол и шифрование).
...
Рейтинг: 0 / 0
Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
    #39224672
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1все пытаются создать велосипед
c одной стороны, да - велосипед.
А с другой, в прикладном программировании используют request.getParameter(
Всё остальное(raw) для системного и ...одноразового)).
Удачи!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Логирование body (spring 4/java8) HttpServletRequest request, HttpServletResponse response
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]