1
我为了认证目的写了一个Spring请求拦截器,它扩展了HandlerInterceptorAdapter。我已经与这条线在我的servlet上下文设置:如何从弹簧拦截器转发到特定的注释处理程序?
<mvc:interceptors>
<bean class = "it.jsoftware.jacciseweb.controllers.AuthInterceptor">
<property name="manServ" ref = "acciseService"></property>
</bean>
</mvc:interceptors>
和预处理方法是
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HttpSession sess = request.getSession();
String path = request.getPathTranslated();
boolean autenticated = maincont.isAuthenticated(sess);
if (!autenticated){
response.sendRedirect("accise?action=login");
return false;
}
return super.preHandle(request, response, handler);
}
这样无论如何,它会产生一个重定向循环,因为它永远不会到达由于拦截和重定向导致重定向页面。
有很多方法可以解决这个问题,但我不知道如何实现这些目标:
- 检测请求的网址(但我不知道如何),不检查认证登录页面。此外,我想让这个解决方案更加灵活。
- 直接在控制器上选择登录处理程序。我怎么做?可能吗?
- 我在例子中看到人们使用org.springframework.web.servlet.handler.SimpleUrlHandlerMapping指定拦截器映射,无论如何我使用注释。有没有一种方法,使用注释,为拦截器指定一个不同的映射,以便它不会触发上述地址(accise?action = login)?或者,也许链接不同的映射方案?