【发布时间】:2016-02-16 19:42:24
【问题描述】:
我正在使用 Spring Security。我有一个控制器,其中任何用户都必须可以访问某些方法,无论他是否经过身份验证,某些方法必须只能访问通过 JWT 令牌进行身份验证的用户。我已经用 acces="permitAll()" 配置了一些模式,但它似乎不起作用。如果我尝试访问 localhost:8080/name-of-the-app/services/public/whatever 我得到 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 中,我已将 throws 与 return 进行了切换。现在无论我点击哪个网址,我都会得到空白页。
【问题讨论】:
-
spring-security 的版本是多少?
-
Spring:4.2.2.RELEASE Spring Security:4.0.3.RELEASE
-
我认为您使用的是旧版 Spring Security 的配置。尝试使用
access="IS_AUTHENTICATED_ANONYMOUSLY"并为经过身份验证的用户放置 ROLE_USER。尝试阅读更多用户指南 -
但是我的配置中的哪个元素表明它是旧的?
-
本节将为您解释3.2.x和4.x版本的区别:docs.spring.io/spring-security/site/migrate/current/3-to-4/…。
标签: spring spring-mvc spring-security