對不起,我的英語。爲什麼在Spring安全中不工作的方法isAuthenticated()
?我在JSF中使用:彈簧安全3 isAuthenticated()不工作
#{loginMB.authentication.authenticated}
<sec:authorize access="hasRole('ROLE_ADMIN')">
test
</sec:authorize>
它不工作。如果我通過驗證,所有時間都會返回true
。
如果呈現出角色:
#{loginMB.authentication.authorities}
它顯示正確的,當驗證的作用是[ROLE_ADMIN]
,在未認證的作用是[ROLE_ANONYMOUS]
。
什麼時候有問題?
==== ====更新
如果LoginBean
創建梅託德isAuthenticated()
進行檢查AnonymousAuthenticationToken
爲亞歷山大說:
public boolean isAuthenticated(){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return authentication != null && !(authentication instanceof AnonymousAuthenticationToken) && authentication.isAuthenticated();
}
這是工作。謝謝Aleksandr。但授權標籤不起作用。如果我添加一個JSF頁面:
<sec:authorize access="hasRole('ROLE_ANONYMOUS')">
ROLE_ANONYMOUS
</sec:authorize>
<sec:authorize access="hasRole('ROLE_ADMIN')">
ROLE_ADMIN
</sec:authorize>
它打印ROLE_ANONYMOUS和ROLE_ADMIN。爲什麼?
====更新2 ====
的applicationContext-security.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<beans:import resource="applicationContext.xml"/>
<global-method-security jsr250-annotations="enabled" />
<http auto-config="true" use-expressions="true">
<form-login login-page="/pages/login.html" authentication-failure-url="/fail.html"/>
<intercept-url pattern="/**" access="permitAll" />
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="UserDAO">
<password-encoder hash="plaintext" />
</authentication-provider>
</authentication-manager>
</beans:beans>
它工作正常。如果你想使用這種方法,你只需要檢查'AnonymousAuthenticationToken'。 –
我在LoginBean中創建了metod isAuthenticated()來檢查AnonymousAuthenticationToken,它是可行的。但春季安全授權標籤不起作用。 – z3r9
你是什麼意思? –