angularjs + spring应用程序中的拦截器不起作用

时间:2014-07-09 11:43:29

标签: java spring angularjs spring-mvc

我有一个带有Angular JS的Spring MVC Web应用程序,调用spring mvc控制器以检索和显示数据。我需要为我的应用程序实现身份验证过滤器,它将拦截每个请求以检查用户是否已登录。我正在使用sprint拦截器,通过扩展HandlerInterceptorAdapter创建一个类。

以下是我所做的配置 的web.xml

    <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

Spring config xml

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="org.wepapp.interceptor.AuthInterceptor"></bean>
    </mvc:interceptor>

</mvc:interceptors> 

[编辑] 我的拦截器会被调用每个请求。在我的拦截器中,我检查用户会话是否对除登录之外的所有请求都有效。拦截器代码如下

@Component
public class AuthenticationInterceptor extends HandlerInterceptorAdapter {
    public static Logger log = Logger.getLogger(AuthenticationInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) {
        String uri = request.getRequestURI();
        if (uri.endsWith("js") || uri.endsWith("css") || uri.contains("i18n") || uri.endsWith("png") || uri.endsWith("menu.htm") || uri.endsWith("header.jsp") || uri.endsWith("main.jsp")) {
            return true;
        } 
        if (!uri.contains("login")) {
            User user = SessionHelper.getUser(request);
            if (user == null) {
                log.info("Session timed out, redirecting to login page");
                try {
                    response.sendRedirect("/app/resources/main.jsp/#login");
                    response.flushBuffer();
                    return false;

                } catch (IOException e) {
                    log.info("Error redirecting to login");
                }
                return false;
            }
        }

        return true;
    }
}

现在我遇到的问题是,如果我点击url说/app/resources/main.jsp/#user_details,控件转到拦截器,它在会话中找不到用户,但是没有得到重定向到登录页面。而是为同一个uri再次调用拦截器,并进入一个永无止境的循环。有没有办法让这个工作?

0 个答案:

没有答案