public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { ResponseJSONP responseJsonp = returnType.getMethodAnnotation(ResponseJSONP.class); if(responseJsonp == null){ responseJsonp = returnType.getContainingClass().getAnnotation(ResponseJSONP.class); } HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); String callbackMethodName = servletRequest.getParameter(responseJsonp.callback()); if (!IOUtils.isValidJsonpQueryParam(callbackMethodName)) { if (logger.isDebugEnabled()) { logger.debug("Invalid jsonp parameter value:" + callbackMethodName); } callbackMethodName = null; } JSONPObject jsonpObject = new JSONPObject(callbackMethodName); jsonpObject.addParameter(body); beforeBodyWriteInternal(jsonpObject, selectedContentType, returnType, request, response); return jsonpObject; }
/** * Invoked only if the converter type is {@code FastJsonpHttpMessageConverter4}. */ public void beforeBodyWriteInternal(MappingFastJsonValue bodyContainer, MediaType contentType, MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) { HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); for (String name : this.jsonpQueryParamNames) { String value = servletRequest.getParameter(name); if (value != null) { if (!isValidJsonpQueryParam(value)) { continue; } // MediaType contentTypeToUse = getContentType(contentType, request, response); // response.getHeaders().setContentType(contentTypeToUse); bodyContainer.setJsonpFunction(value); break; } } }
@Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { System.out.println("before handshake"); ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request; HttpSession session = servletRequest.getServletRequest().getSession(false); Long uid = (Long)session.getAttribute("uid"); if(uid == null){ return false; } //如果uid==null,afterConnectionEstablished不执行,协议转换不成功,报下面的错误 //websocket.html?uid=1990:56 WebSocket connection to 'ws://localhost:8080/ws?uid=1990' failed: Error during WebSocket handshake: Unexpected response code: 500 attributes.put("uid", uid); return true; // 如果这里返回false,浏览器会报下面这个错误 // WebSocket connection to 'ws://localhost:8080/ws' failed: Error during WebSocket handshake: Unexpected response code: 200 }
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { Class converterType = returnType.getMethod().getDeclaringClass(); FilterResponse defaultResponse = returnType.getMethod().getAnnotation(FilterResponse.class); if(defaultResponse==null) { defaultResponse = (FilterResponse) converterType.getAnnotation(FilterResponse.class); } String className =converterType.getName(); logger.debug("beforeBodyWrite - className >" +className +", defaultResponse - > "+defaultResponse); if(defaultResponse!=null){ switch (defaultResponse.type()){ case defaultFilter:{ response.getHeaders().add(Constants.defaultResponseHeader,Constants.defaultResponseHeader); } } } return body; }
@Override protected void beforeBodyWriteInternal(final MappingJacksonValue bodyContainer, final MediaType contentType, final MethodParameter returnType, final ServerHttpRequest request, final ServerHttpResponse response) { final Mutable<Class<?>> viewClass = Mutable.of(View.Anonymous.class); if (SecurityContextHolder.getContext().getAuthentication() != null && SecurityContextHolder.getContext().getAuthentication().getAuthorities() != null) { final Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities(); viewClass.mutateIf(View.User.class, authorities.stream().anyMatch(o -> o.getAuthority().equals("PRIV_USER"))); viewClass.mutateIf(View.Moderator.class, authorities.stream().anyMatch(o -> o.getAuthority().equals("PRIV_MODERATOR"))); viewClass.mutateIf(View.Admin.class, authorities.stream().anyMatch(o -> o.getAuthority().equals("PRIV_ADMIN"))); } bodyContainer.setSerializationView(viewClass.get()); }
/** * Build log message for request in bound. * * @param request Request in bound. * @return Log message. * @since 1.0.0 */ protected String buildRequestLog(HttpServletRequest request) { ServerHttpRequest httpRequest = new ServletServerHttpRequest(request); StringBuilder sb = new StringBuilder("Server has received a request").append(StringUtils.LF) .append(" > ").append(httpRequest.getMethod()).append(" ").append(httpRequest.getURI()).append (StringUtils.LF); Map<String, String> headers = httpRequest.getHeaders().toSingleValueMap(); for (Map.Entry<String, String> entry : headers.entrySet()) { sb.append(" > ").append(entry.getKey()).append(": ").append(entry.getValue()).append(StringUtils.LF); } sb.append(extractRequestPayload(request)); return sb.toString(); }
@Override public BizRes beforeBodyWrite(BizRes body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { String deviceToken = response.getHeaders().getFirst(requestHeaderProperties.getDeviceToken()); if (body instanceof ErrorRes) { ((ErrorRes) body).setVd(deviceToken); return body; } if (body instanceof SuccessRes) { ((SuccessRes) body).setVd(deviceToken); return body; } SuccessRes res = new SuccessRes(body); res.setVd(deviceToken); return res; }
@Test public void getBodyViaRequestParameterWithRequestEncoding() throws Exception { MockMultipartHttpServletRequest mockRequest = new MockMultipartHttpServletRequest() { @Override public HttpHeaders getMultipartHeaders(String paramOrFileName) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return headers; } }; byte[] bytes = {(byte) 0xC4}; mockRequest.setParameter("part", new String(bytes, Charset.forName("iso-8859-1"))); mockRequest.setCharacterEncoding("iso-8859-1"); ServerHttpRequest request = new RequestPartServletServerHttpRequest(mockRequest, "part"); byte[] result = FileCopyUtils.copyToByteArray(request.getBody()); assertArrayEquals(bytes, result); }
@Override protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType, MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) { HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); for (String name : this.jsonpQueryParamNames) { String value = servletRequest.getParameter(name); if (value != null) { if (!isValidJsonpQueryParam(value)) { if (logger.isDebugEnabled()) { logger.debug("Ignoring invalid jsonp parameter value: " + value); } continue; } MediaType contentTypeToUse = getContentType(contentType, request, response); response.getHeaders().setContentType(contentTypeToUse); bodyContainer.setJsonpFunction(value); break; } } }
private void testHttpConnectionNonAsync(long sleepBeforeResponse) throws IOException, InterruptedException { ServerHttpRequest request = mock(ServerHttpRequest.class); given(request.getAsyncRequestControl(this.response)) .willThrow(new IllegalArgumentException()); final HttpConnection connection = new HttpConnection(request, this.response); final AtomicBoolean responded = new AtomicBoolean(); Thread connectionThread = new Thread() { @Override public void run() { connection.waitForResponse(); responded.set(true); } }; connectionThread.start(); assertThat(responded.get()).isFalse(); Thread.sleep(sleepBeforeResponse); connection.respond(HttpStatus.NO_CONTENT); connectionThread.join(); assertThat(responded.get()).isTrue(); }
@Override protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType, MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) { Page<?> page = ((Page<?>) bodyContainer.getValue()); response.getHeaders().add(CUSTOM_HEADER_META_PAGINATION, String.format(PAGE_METADATA_FMT, page.getNumber(), page.getSize(), page.getTotalElements(), page.getTotalPages(), page.isFirst(), page.isLast())); getHttpHeaderLinksString(request, page) .filter(StringUtils::isNotEmpty) .ifPresent(s -> response.getHeaders().add(HttpHeaders.LINK, s)); // finally, strip out the actual content and replace it as the body value bodyContainer.setValue(page.getContent()); }
@Test public void getBodyViaRequestParameter() throws Exception { MockMultipartHttpServletRequest mockRequest = new MockMultipartHttpServletRequest() { @Override public HttpHeaders getMultipartHeaders(String paramOrFileName) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(new MediaType("application", "octet-stream", Charset.forName("iso-8859-1"))); return headers; } }; byte[] bytes = {(byte) 0xC4}; mockRequest.setParameter("part", new String(bytes, Charset.forName("iso-8859-1"))); ServerHttpRequest request = new RequestPartServletServerHttpRequest(mockRequest, "part"); byte[] result = FileCopyUtils.copyToByteArray(request.getBody()); assertArrayEquals(bytes, result); }
@Override public boolean beforeHandshake(final ServerHttpRequest request, final ServerHttpResponse response, final WebSocketHandler wsHandler, final Map<String, Object> attributes) throws Exception { // UserSession.getCurrent().assertLoggedIn(); // return true; final UserSession userSession = UserSession.getCurrentOrNull(); if (userSession == null) { logger.warn("Websocket connection not allowed (missing userSession)"); response.setStatusCode(HttpStatus.UNAUTHORIZED); return false; } if (!userSession.isLoggedIn()) { logger.warn("Websocket connection not allowed (not logged in) - userSession={}", userSession); response.setStatusCode(HttpStatus.UNAUTHORIZED); return false; } return true; }
protected boolean checkOrigin(ServerHttpRequest request, ServerHttpResponse response, HttpMethod... httpMethods) throws IOException { if (WebUtils.isSameOrigin(request)) { return true; } if (!WebUtils.isValidOrigin(request, this.allowedOrigins)) { if (logger.isWarnEnabled()) { logger.warn("Origin header value '" + request.getHeaders().getOrigin() + "' not allowed."); } response.setStatusCode(HttpStatus.FORBIDDEN); return false; } return true; }
@Test public void handledByDispatcher() throws Exception { HttpServletRequest request = new MockHttpServletRequest("GET", "/hello"); HttpServletResponse response = new MockHttpServletResponse(); willReturn(true).given(this.dispatcher).handle(any(ServerHttpRequest.class), any(ServerHttpResponse.class)); this.filter.doFilter(request, response, this.chain); verifyZeroInteractions(this.chain); verify(this.dispatcher).handle(this.serverRequestCaptor.capture(), this.serverResponseCaptor.capture()); ServerHttpRequest dispatcherRequest = this.serverRequestCaptor.getValue(); ServletServerHttpRequest actualRequest = (ServletServerHttpRequest) dispatcherRequest; ServerHttpResponse dispatcherResponse = this.serverResponseCaptor.getValue(); ServletServerHttpResponse actualResponse = (ServletServerHttpResponse) dispatcherResponse; assertThat(actualRequest.getServletRequest()).isEqualTo(request); assertThat(actualResponse.getServletResponse()).isEqualTo(response); }
/** * Handle all requests, except the first one, to receive messages on a SockJS * HTTP transport based session. * <p>Long polling-based transports (e.g. "xhr", "jsonp") complete the request * after writing any buffered message frames (or the next one). Streaming-based * transports ("xhr_streaming", "eventsource", and "htmlfile") leave the * response open longer for further streaming of message frames but will also * close it eventually after some amount of data has been sent. * @param request the current request * @param response the current response * @param frameFormat the transport-specific SocksJS frame format to use */ public void handleSuccessiveRequest(ServerHttpRequest request, ServerHttpResponse response, SockJsFrameFormat frameFormat) throws SockJsException { synchronized (this.responseLock) { try { if (isClosed()) { response.getBody().write(SockJsFrame.closeFrameGoAway().getContentBytes()); return; } this.response = response; this.frameFormat = frameFormat; this.asyncRequestControl = request.getAsyncRequestControl(response); this.asyncRequestControl.start(-1); disableShallowEtagHeaderFilter(request); handleRequestInternal(request, response, false); this.readyToSend = isActive(); } catch (Throwable ex) { tryCloseWithSockJsTransportError(ex, CloseStatus.SERVER_ERROR); throw new SockJsTransportFailureException("Failed to handle SockJS receive request", getId(), ex); } } }
@Override public void handleRequestInternal(ServerHttpRequest request, ServerHttpResponse response, AbstractHttpSockJsSession sockJsSession) throws SockJsException { String callback = getCallbackParam(request); if (!StringUtils.hasText(callback)) { response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); try { response.getBody().write("\"callback\" parameter required".getBytes(UTF8_CHARSET)); } catch (IOException ex) { sockJsSession.tryCloseWithSockJsTransportError(ex, CloseStatus.SERVER_ERROR); throw new SockJsTransportFailureException("Failed to write to response", sockJsSession.getId(), ex); } return; } super.handleRequestInternal(request, response, sockJsSession); }
protected final String getCallbackParam(ServerHttpRequest request) { String query = request.getURI().getQuery(); MultiValueMap<String, String> params = UriComponentsBuilder.newInstance().query(query).build().getQueryParams(); String value = params.getFirst("c"); if (StringUtils.isEmpty(value)) { return null; } try { String result = UriUtils.decode(value, "UTF-8"); return (CALLBACK_PARAM_PATTERN.matcher(result).matches() ? result : null); } catch (UnsupportedEncodingException ex) { // should never happen throw new SockJsException("Unable to decode callback query parameter", null, ex); } }
@Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { HttpStatus httpStatus = HttpStatus.OK; if (request.getMethod().equals(HttpMethod.DELETE)) { httpStatus = HttpStatus.NO_CONTENT; } else if (request.getMethod().equals(HttpMethod.POST)) { httpStatus = HttpStatus.CREATED; } else if (request.getMethod().equals(HttpMethod.PUT)) { httpStatus = HttpStatus.OK; } else if (request.getMethod().equals(HttpMethod.GET)) { if (body == null) { httpStatus = HttpStatus.NOT_FOUND; } } response.setStatusCode(httpStatus); return RestResponseBuilder.ok().withHttpStatus(httpStatus).withResult(body).getResponse(); }
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { MappingFastJsonValue container = getOrCreateContainer(body); beforeBodyWriteInternal(container, selectedContentType, returnType, request, response); return container; }
@Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { // 解决The extension [x-webkit-deflate-frame] is not supported问题 if (request.getHeaders().containsKey("Sec-WebSocket-Extensions")) { request.getHeaders().set("Sec-WebSocket-Extensions", "permessage-deflate"); } System.out.println("Before Handshake"); return super.beforeHandshake(request, response, wsHandler, attributes); }
@Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) { System.out.println("After Handshake"); super.afterHandshake(request, response, wsHandler, ex); }
@Override protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType, MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) { ((ResponseBodyMessage) bodyContainer.getValue()).businessMsg = "xxxxxxxxxxxxxx"; }
@Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { String rid = ((ServletServerHttpRequest) request).getServletRequest().getParameter("rid"); String otid = ((ServletServerHttpRequest) request).getServletRequest().getParameter("otid"); if (Strings.isNullOrEmpty(rid) || Strings.isNullOrEmpty(otid)) { return false; } else { attributes.put("rid", rid); attributes.put("otid", otid); return true; } }
@Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { String rid = ((ServletServerHttpRequest) request).getServletRequest().getParameter("rid"); if (Strings.isNullOrEmpty(rid)) { return false; } else { attributes.put("rid", rid); return true; } }
@Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { System.out.println("Before Handshake"); ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request; HttpSession session = servletRequest.getServletRequest().getSession(); if(session!=null){ //区分socket连接以定向发送消息 attributes.put("user", session.getAttribute("user")); } return true; }
@Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { if (request instanceof ServletServerHttpRequest) { ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request; HttpSession session = servletRequest.getServletRequest().getSession(); attributes.put("cols",servletRequest.getServletRequest().getParameter("cols")); attributes.put("rows",servletRequest.getServletRequest().getParameter("rows")); attributes.put("width",servletRequest.getServletRequest().getParameter("width")); attributes.put("height",servletRequest.getServletRequest().getParameter("height")); attributes.put(SSH_SESSION_ID,session.getAttribute(SSH_SESSION_ID)); attributes.put(HTTP_SESSION_ID,session.getAttribute(HTTP_SESSION_ID)); } return super.beforeHandshake(request,response,wsHandler,attributes); }
/** * 重写callback方法,使即支持jsonp格式也支持json格式 */ @Override protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType, MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) { HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); //如果不存在callback这个请求参数,直接返回,不需要处理为jsonp if (ObjectUtils.isEmpty(servletRequest.getParameter("callback"))) { return; } //按设定的请求参数(JsonAdvice构造方法中的this.jsonpQueryParamNames = new String[]{"callback"};),处理返回结果为jsonp格式 for (String name : this.jsonpQueryParamNames) { String value = servletRequest.getParameter(name); if (value != null) { if (!isValidJsonpQueryParam(value)) { if (logger.isDebugEnabled()) { logger.debug("Ignoring invalid jsonp parameter value: " + value); } continue; } MediaType contentTypeToUse = getContentType(contentType, request, response); response.getHeaders().setContentType(contentTypeToUse); bodyContainer.setJsonpFunction(value); return; } } }
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { Class converterType = returnType.getMethod().getDeclaringClass(); FilterResponse defaultResponse = returnType.getMethod().getAnnotation(FilterResponse.class); if(defaultResponse==null) { defaultResponse = (FilterResponse) converterType.getAnnotation(FilterResponse.class); } String className =converterType.getName(); logger.debug("beforeBodyWrite - className >" +className +", defaultResponse - > "+defaultResponse); if(defaultResponse!=null){ switch (defaultResponse.type()){ case defaultFilter:{ return body; } } } Response res = new Response(); Msg msg = new Msg(); res.setCode(40000); res.setData(body); res.setMsg(""); msg.setState(1); msg.setRes(res); return msg; }
/** * {@inheritDoc} */ @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { Page<?> page = (Page<?>) body; this.paginationHeadersBuilder.addPaginationData(response.getHeaders(), page); return page.getContent(); }
@Override protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType, MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) { response.getHeaders().set("Access-Control-Allow-Headers", "Origin,No-Cache,X-Requested-with,If-Modified-Since,Last-Modified,Cache-Control,Expires,Content-Type"); response.getHeaders().set("Access-Control-Allow-Origin", "*"); response.getHeaders().set("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE"); response.getHeaders().set("Access-Control-Max-Age", "1512000"); }
@Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { System.out.println("Before Handshake"); //get userId UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String username = userDetails.getUsername(); UserInfo userInfo = userInfoDao.getUserInfoByUsername(username); int userId = userInfo.getUserId(); //put into websocketSession attributes.put("userId", userId); return true; }
@Override public ApiResponse beforeBodyWrite(ApiResponse body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (request instanceof ServletServerHttpRequest) { ServletServerHttpRequest servletServerHttpRequest = (ServletServerHttpRequest) request; RequestInfo requestInfo = (RequestInfo) servletServerHttpRequest.getServletRequest().getAttribute(Constants.REQUEST_INFO_TAG); if (requestInfo != null) { RequestStatistics.getSingleton().complete(requestInfo); } } return body; }
@Override public WxMessage beforeBodyWrite(WxMessage body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (!(request instanceof ServletServerHttpRequest) || body == null) { return body; } HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); WxRequest wxRequest = WxWebUtils.getWxRequestFromRequest(servletRequest); return wxMessageProcessor.process(new WxRequestMessageParameter(wxRequest), body); }
@Override public WxMediaResource beforeBodyWrite(WxMediaResource body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (body == null || !body.isUrlMedia()) { return body; } try { response.getHeaders().setLocation(body.getURI()); response.setStatusCode(HttpStatus.FOUND); return null; } catch (IOException e) { throw new WxAppException("系统异常"); } }
@Override public String beforeBodyWrite(String body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (!(request instanceof ServletServerHttpRequest) || StringUtils.isEmpty(body)) { return null; } HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); WxRequest wxRequest = WxWebUtils.getWxRequestFromRequest(servletRequest); WxUserMessage text = WxMessage.Text.builder().content(body).build(); return parseXml(wxMessageProcessor.process(new WxRequestMessageParameter(wxRequest), text)); }
@Test public void accessManagerVetoRequest() throws Exception { given(this.accessManager.isAllowed(any(ServerHttpRequest.class))) .willReturn(false); HandlerMapper mapper = mock(HandlerMapper.class); Handler handler = mock(Handler.class); given(mapper.getHandler(any(ServerHttpRequest.class))).willReturn(handler); Dispatcher dispatcher = new Dispatcher(this.accessManager, Collections.singleton(mapper)); dispatcher.handle(this.serverRequest, this.serverResponse); verifyZeroInteractions(handler); assertThat(this.response.getStatus()).isEqualTo(403); }
@Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (request instanceof ServletServerHttpRequest) { beforeBodyWrite(body, (ServletServerHttpRequest) request); } return body; }