2015-11-15 89 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調用。