2017-04-06 3 views
0

Meine config in applicationContext.xml abzufangen sich wie folgt:Wie Ressourcen Feder Abfangjäger oder Filter

<mvc:annotation-driven/> 
    <context:component-scan base-package="com.lixindi.gradproject"/> 
    <mvc:resources mapping="login/**" location="login/"/> 
    <mvc:resources mapping="admin/**" location="admin/"/> 
    <mvc:resources mapping="vote/**" location="vote/"/> 

    <mvc:interceptors> 
     <mvc:interceptor> 
      <mvc:mapping path="/admin/**"/> 
      <bean class="com.lixindi.gradproject.interceptor.LoginInterceptor"/> 
     </mvc:interceptor> 
    </mvc:interceptors> 

LoginInterceptor:

public class LoginInterceptor extends HandlerInterceptorAdapter { 
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { 
     if (httpServletRequest.getSession().getAttribute("user") == null) { 
      httpServletResponse.sendRedirect("/login/login.html"); 
      System.out.println("invoked"); 
      return false; 
     } else { 
      return true; 
     } 
    } 
} 

Es gibt mehrere HTML-Dateien unter Webapp/admin, die ich tun Ich möchte nicht DispatcherServlet durchlaufen. Und der Interceptor fängt keine Anfragen ab, zum Beispiel http://localhost:8080/admin/admin.html. Aber ich möchte, dass alle URLs einschließlich Ressourcen abgefangen werden, um sicherzustellen, dass Benutzer angemeldet sind. Wie kann ich das erreichen?

Dank @Serge Ballesta.

Es kann jedoch immer noch keine Ressourcen abfangen, z. B. http://localhost:8080/admin/admin.html.

web.xml:

<filter> 
     <filter-name>LoginFilter</filter-name> 
     <filter-class>com.lixindi.gradproject.filter.LoginFilter</filter-class> 

    </filter> 

    <filter-mapping> 
     <filter-name>CharacterEncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
     <filter-name>LoginFilter</filter-name> 
     <url-pattern>/admin/*</url-pattern> 
    </filter-mapping> 

LoginFilter:

public class LoginFilter implements Filter { 
public void init(FilterConfig filterConfig) throws ServletException { 

} 

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
    HttpServletRequest request = (HttpServletRequest) servletRequest; 
    HttpServletResponse response = (HttpServletResponse) servletResponse; 
    System.out.println("filter"); 
    if (request.getSession().getAttribute("user") == null) { 

     response.sendRedirect("/login/login.html"); 
    } else { 
     filterChain.doFilter(servletRequest, servletResponse); 
    } 
} 

public void destroy() { 

} 

}

Antwort

1

Interceptor sind eine Art privater Filter, die von den SpringMVC Maschinen rund um den Controller aufgerufen werden (oder sogar nach die Rendering-Phase). Es macht also keinen Sinn, nach einem Interceptor zu fragen, der nach einer URL aufgerufen wird, die nicht vom DispatcherServlet verarbeitet wird, das der Einstiegspunkt dieser Maschine ist.

Sie eine einfache Java-EE Filter hier verwenden müssen, weil Filter direkt durch den Servlet-Container

+0

Dank genannt werden. Aber es kann immer noch keine Ressourcen abfangen. Bitte sehen Sie meine aktualisierte Frage. –