【发布时间】:2011-06-28 12:44:42
【问题描述】:
我为身份验证编写了一个 Spring 请求拦截器,它扩展了 HandlerInterceptorAdapter。我在我的 servlet-context 中用这一行设置了它:
<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);
}
无论如何,它都会生成一个重定向循环,因为由于拦截和重定向,它永远不会到达重定向页面。
有很多方法可以解决这个问题,但我不知道如何实现:
- 检测请求的 url(但我不知道如何)并且不检查登录页面的身份验证。此外,我想让这个解决方案更加灵活。
- 直接在控制器上选择登录处理程序。我怎么做?有可能吗?
- 我已经看到,在示例中人们使用 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping 指定拦截器映射,无论如何我使用的是注释。有没有办法使用注释为拦截器指定不同的映射,以便它不会使用上述地址触发(accise?action=login)?或者可能链接不同的映射方案?
【问题讨论】:
标签: model-view-controller spring interceptor