首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring安全3 isAuthenticated()不工作

spring安全3 isAuthenticated()不工作
EN

Stack Overflow用户
提问于 2013-10-07 10:05:53
回答 1查看 7.3K关注 0票数 2

对不起我的英语。为什么Spring安全中的工作方法isAuthenticated()不工作?我在JSF中使用:

代码语言:javascript
复制
#{loginMB.authentication.authenticated}

<sec:authorize access="hasRole('ROLE_ADMIN')">
    test
</sec:authorize>

它不起作用。如果我身份验证与否,它始终返回true

如果显示一个角色:

代码语言:javascript
复制
#{loginMB.authentication.authorities}

是正确的,身份验证时角色是[ROLE_ADMIN],未经身份验证的角色是[ROLE_ANONYMOUS]

什么时候有问题?

====更新====

如果按照Aleksandr的说法在LoginBean中为AnonymousAuthenticationToken创建metod AnonymousAuthenticationToken

代码语言:javascript
复制
public boolean isAuthenticated(){

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    return authentication != null && !(authentication instanceof AnonymousAuthenticationToken) && authentication.isAuthenticated();

}

起作用了。谢谢你阿列克桑德尔。但是授权标记不起作用。如果我添加一个JSF页面:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-10 22:28:10

问题解决了。

  1. 如果按照Aleksandr的说法,在LoginBean中为AnonymousAuthenticationToken创建metod AnonymousAuthenticationToken(): 公共布尔值(){身份验证= SecurityContextHolder.getContext().getAuthentication();返回身份验证!= null &!(AnonymousAuthenticationToken的身份验证实例) &&;authentication.isAuthenticated()} 起作用了。谢谢你阿列克桑德尔。
  2. 将在JSF页面中使用授权标记来读取here。我有it的问题。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19221979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档