2015-11-15 64 views
0

我正在使用Spring Security。我有一个控制器,其中有些方法必须可以由任何用户访问,无论他是否经过身份验证,有些方法只能访问使用JWT令牌进行身份验证的用户。我用acces =“permitAll()”配置了一些模板,但它似乎不起作用。如果我尝试访问本地主机:8080 /名称的应用程序/服务/公共/无论我得到401,我回到我的MobileJWTAuthenticationEntryPoint.commence方法。你可以帮我吗?春季安全许可证全部不起作用

这是我的context.xml:

<security:global-method-security pre-post-annotations="enabled"/> 

<security:http entry-point-ref="mobileJWTAuthenticationEntryPoint" 
       authentication-manager-ref="mobileJWTAuthenticationManager" 
       create-session="stateless" 
       use-expressions="true"> 
    <security:custom-filter ref="mobileJWTAuthenticationFilter" position="FORM_LOGIN_FILTER" /> 
    <security:intercept-url pattern="/services/public/**" access="permitAll()"/> 
    <security:intercept-url pattern="/services/restAPI/**" access="isAuthenticated()" /> 
</security:http> 

<bean id="mobileJWTAuthenticationEntryPoint" class="co.amleto.server.services.security.MobileJWTAuthenticationEntryPoint"/> 

<bean id="mobileJWTAuthenticationFilter" class="co.amleto.server.services.security.MobileJWTAuthenticationFilter" > 
    <constructor-arg name="authenticationManager" ref="mobileJWTAuthenticationManager"/> 
    <constructor-arg name="entryPoint" ref="mobileJWTAuthenticationEntryPoint"/> 
</bean> 

<bean id="mobileJWTAuthenticationProvider" class="co.amleto.server.services.security.MobileJWTAuthenticationProvider"/> 

<security:authentication-manager alias="mobileJWTAuthenticationManager"> 
    <security:authentication-provider ref="mobileJWTAuthenticationProvider"/> 
</security:authentication-manager> 

编辑:我的整个代码受此启发:http://massimilianosciacco.com/spring-security-jwt-authentication。在AuthenticationFilter中,我使用return来切换投掷。现在我得到空白页面,无论我打哪个网址。

+0

spring-security的版本是什么? – Spartan

+0

Spring:4.2.2.RELEASE Spring Security:4.0.3.RELEASE – Jacek

+0

我认为您使用的是旧版本Spring Security的配置。尝试使用'access =“IS_AUTHENTICATED_ANONYMOUSLY”',并为经过身份验证的用户放置ROLE_USER。尝试阅读更多的用户指南 – Spartan

回答

0

问题解决。正如我在编辑中提到的,我的代码基于OP中添加链接的解决方案。自定义过滤器有错误的代码:在任何情况下都会抛出异常。解决方法是调用chain.doFilter(request,response)并从doFilter方法返回,以允许匿名url调用。