2011-02-16 38 views
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); 
    } 

这样无论如何,它会产生一个重定向循环,因为它永远不会到达由于拦截和重定向导致重定向页面。

有很多方法可以解决这个问题,但我不知道如何实现这些目标:

  1. 检测请求的网址(但我不知道如何),不检查认证登录页面。此外,我想让这个解决方案更加灵活。
  2. 直接在控制器上选择登录处理程序。我怎么做?可能吗?
  3. 我在例子中看到人们使用org.springframework.web.servlet.handler.SimpleUrlHandlerMapping指定拦截器映射,无论如何我使用注释。有没有一种方法,使用注释,为拦截器指定一个不同的映射,以便它不会触发上述地址(accise?action = login)?或者,也许链接不同的映射方案?

回答

1

是否有没有使用弹簧安全的特定原因?

恕我直言简单,功能强大,经过深入测试。

您可以简单地实现并注入您的自定义身份验证器,spring-security将处理重定向。