2016-03-24 4 views
0

以下はweb.xmlでの設定です.1つのJwtFilterがありますが、残りのURLが呼び出されたときにアクセスできません。ウェブアプリケーションにアクセスしたとき、またはURLにヒットしたときにカスタムのスプリングフィルタが呼び出されない

web.xmlの

<web-app 
<display-name>Portal Web</display-name> 

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/mvc-dispatcher-servlet-spring-config.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

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

<filter> 
    <filter-name>jwtFilter</filter-name> 
    <filter-class>com.pingle.lola.authentication.JwtFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>jwtFilter</filter-name> 
    <url-pattern>/portal/lola/*</url-pattern> 
</filter-mapping> 

これは私のJwtFilter

public class JwtFilter extends GenericFilterBean { 

@Override 
public void doFilter(final ServletRequest req, 
        final ServletResponse res, 
        final FilterChain chain) throws IOException, ServletException { 
    final HttpServletRequest request = (HttpServletRequest) req; 
    System.out.println("came here"); 
    final String authHeader = request.getHeader("Authorization"); 
    System.out.println("came here - " + authHeader); 
    if (authHeader == null || !authHeader.startsWith("Bearer ")) { 
     System.out.println("should throw"); 
     throw new ServletException("Missing or invalid Authorization header."); 
    } 

    final String token = authHeader.substring(7); // The part after "Bearer " 
    System.out.println("came here" + token); 

    try { 
     final Claims claims = Jwts.parser().setSigningKey("secretkey") 
      .parseClaimsJws(token).getBody(); 
     request.setAttribute("claims", claims); 
    } 
    catch (final SignatureException e) { 
     throw new ServletException("Invalid token."); 
    } 

    chain.doFilter(req, res); 
} 

}

であると私は基本的な残りのAPIがconfuguredされているコントローラを持っています。私は、URLがlocalhost:8080/portal/lola/getDataのようにヒットしたかどうかを調べようとしています。JwtFilterに行き、リクエストのヘッダーにある認証トークンを確認し、有効であればコントローラに渡します。ロジックは正しく書かれていますが、フィルターは呼び出されません。私が上記のURLにヒットしたとき、フィルターに達することなくコントローラーに直接行きます。その任意のコントローラにマッピングされていないときに私はそれを作成した理由

私の春のconfig.xml

<context:component-scan base-package="com.pingle.lola.controller"/> 
<mvc:annotation-driven/> 

//いけない知っている:(

<mvc:default-servlet-handler/> 

答えて

0

/portalがあるように思えフィルタurl-patternはコンテキストの名前を含むべきではありません。つまり、url-patternのフィルタは/lola/*でなければなりません/portalなし。フィルタマッピングを変更して:

<filter-mapping> 
    <filter-name>jwtFilter</filter-name> 
    <url-pattern>/lola/*</url-pattern> 
</filter-mapping> 
関連する問題