【问题标题】:How to forward to a specific annotated handler from a spring interceptor?如何从弹簧拦截器转发到特定的注释处理程序?
【发布时间】: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);
    }

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

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

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

【问题讨论】:

    标签: model-view-controller spring interceptor


    【解决方案1】:

    不使用spring-security有什么具体原因吗?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多