永不调用Spring安全自定义筛选器

时间:2016-08-12 22:48:36

标签: java spring-security

问题是我的自定义Spring Security过滤器从未在请求​​进入时调用。在调试过程中,我发现在doFilter() FilterChainProxy中,我的过滤器(JwtAuthenticationFilter)可以被抓取:

enter image description here

但它被跳过了。然后我发现它是由于:

enter image description here

因此我的文件管理器的超类AbstractAuthenticationProcessingFilter认为该请求不需要身份验证,只需调用doFilter()即可将其传递下去。我认为我的配置指出需要auth。此特定请求为/ui/home/index.jsp,其中\ui为上下文。

我的安全配置:

<http use-expressions="true" pattern="/**" entry-point-ref="JwtAuthenticationEntryPoint" create-session="stateless">
    <custom-filter before="CONCURRENT_SESSION_FILTER" ref="jwtAuthenticationFilter" />
    <intercept-url pattern="/home/**" access="isAuthenticated()"/>
    // some other intercept-url definitions    
</http>
<authentication-manager alias="authenticationManager">
    <authentication-provider ref="authenticationProvider"/>
</authentication-manager>

和bean配置:

 <bean id="jwtAuthenticationFilter" class="com.pk.jjwt.JwtAuthenticationTokenFilter" >
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="authenticationSuccessHandler" ref="jwtAuthenticationSuccessHandler" />
 </bean>

 <bean id="JwtAuthenticationEntryPoint" class="com.pk.jjwt.JwtAuthenticationEntryPoint" />

 <bean id="authenticationProvider" class="com.pk.jjwt.JwtAuthenticationProvider" />
 <bean id="jwtAuthenticationSuccessHandler" class="com.pk.jjwt.JwtAuthenticationSuccessHandler" />

我想知道什么可能导致过滤器被跳过?我想我指定每个url模式都需要进行身份验证。我不确定为什么它认为请求不需要我的自定义过滤器进行身份验证。

修改

所以我调试了requiresAuthentication()方法,并找到了:

enter image description here

基本上,它评估uri.endsWith("/ui/**")uri/ui/home/index.jsp。它返回false,因此会跳过过滤器。

0 个答案:

没有答案