[SPRING] 저지에 Spring의 HandlerInterceptor와 비슷한 인터셉터가 있습니까?
SPRING저지에 Spring의 HandlerInterceptor와 비슷한 인터셉터가 있습니까?
저지 2.x에서 웹 서비스에 대한 경로와 일치하는 요청, 응답 및 메소드에 대한 참조를 제공하는 인터셉터가 필요합니다.
Spring의 HandlerInterceptor와 비슷한 것.
요구 사항 :
봄 상당 코드 :
public class WebServiceInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
SkipWebServiceIntercept skipWebService = handler.getClass().getAnnotation(SkipWebServiceIntercept.class);
if (skipWebService != null) {
return Boolean.TRUE;
}
...
if(securityFails)
{
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
response.setCharacterEncoding("utf-8");
response.setContentType("application/json");
PrintWriter out = response.getWriter();
String json;
...
out.println(json);
return Boolean.FALSE;
}
else {
response.sendRedirect(redirectUrl);
}
}
else
{
return Boolean.TRUE;
}
}catch (Exception e) {
log.error("Exception in preHandle, redirecting to Login page", e);
return LoginUtil.redirectToLogin(request, response);
}
}
}
나는
필터를 사용하지 않고도이를 달성 할 수있는 방법이 있습니까? 해당 웹 서비스가있는 경우에만이 처리가 필요하기 때문입니다. 반면에 / *가있는 필터는 자원을 찾을 수없는 경우에도 항상이 유효성 검사를 수행합니다.
편집하다: 감사합니다 @ peeskillet 대답 이것은 어떻게 구현 한 것입니다.
@Provider
public class ResourceInterceptor implements DynamicFeature {
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
System.out.println("Resource Interceptor called");
if (resourceInfo.getResourceClass() != null
&& resourceInfo.getResourceClass().getAnnotation(SkipWebServiceIntercept.class) != null)
return;
context.register(LoginFilter.class);
}
}
@Slf4j
public class LoginFilter implements ContainerRequestFilter {
@Context
private HttpServletRequest request;
@Context
private ServletContext servletContext;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
try {
WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
CookieAuthenticator cookieAuthenticator = springContext.getBean(CookieAuthenticator.class);
HttpSession session = request.getSession(true);
...
...
String json = gson.toJson(resposeJson);
Response response = new ResponseBuilderImpl().encoding(StandardCharsets.UTF_8.name())
.type(MediaType.APPLICATION_JSON).entity(json).build();
requestContext.abortWith(response);
...
...
URI uri = new URI(baseUrl + redirectUrl + "?refback=" + url);
requestContext.abortWith(Response.temporaryRedirect(uri).build());
...
두 접근법 모두 Spring의 HandlerInterceptor와 비슷하게 완벽하게 작동했습니다.
해결법
-
==============================
1.필터를 등록하는 방법에는 여러 가지가 있습니다.
필터를 등록하는 방법에는 여러 가지가 있습니다.
참조 :
from https://stackoverflow.com/questions/35727497/is-there-an-interceptor-in-jersey-similar-to-that-of-springs-handlerinterceptor by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @RequestParam은 정확히 무엇이며 어떻게 채워 집니까? (0) | 2019.04.25 |
---|---|
[SPRING] 스프링 데이터 투영 및 오류 : "결과 튜플에서 별칭을 찾을 수 없습니다! 쿼리가 별칭을 정의하는지 확인하십시오! " (0) | 2019.04.25 |
[SPRING] bean을 JSF Managed Bean으로 autowiring 할 때 널 (null) 포인터 (0) | 2019.04.25 |
[SPRING] vaadin과 함께 스프링 부트를 사용할 때 js 파일 용 404 (0) | 2019.04.25 |
[SPRING] @TestPropertySource가 속성을로드하지 않습니다. (0) | 2019.04.25 |