2013-10-07 5 views
2

Извините за мой английский. Почему не работает метод isAuthenticated() весной? Я использую в JSF:Весна безопасности 3 isAuthenticated() не работает

#{loginMB.authentication.authenticated} 

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

Он не работает. Все время он возвращает true, если я аутентифицирован или нет.

Если показывает роли:

#{loginMB.authentication.authorities} 

Он показывает правильно, когда аутентификация роли является [ROLE_ADMIN], когда не прошел проверку подлинности роли является [ROLE_ANONYMOUS].

Когда проблема?

==== Обновление ====

Если создать Metod isAuthenticated() в LoginBean для проверки AnonymousAuthenticationToken как сказал Александр:

public boolean isAuthenticated(){ 

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

} 

Он работает. Спасибо, Александр. Но авторизовать тег не работает. Если добавить в странице 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> 
+0

Он отлично работает. Вам просто нужно проверить «AnonymousAuthenticationToken», если вы хотите использовать этот метод. –

+0

Я создал метод isAuthenticated() в LoginBean для проверки AnonymousAuthenticationToken, это работа. Но весенний знак безопасности не работает. – z3r9

+0

Что это значит? –

ответ

3

проблема решена.

  1. Если создать Metod isAuthenticated() в LoginBean для проверки AnonymousAuthenticationToken как сказал Александр:

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

    Он работает. Спасибо, Александр.

  2. Для работы будет действовать тег авторизации на странице JSF, чтобы читать here. И у меня была проблема it.

Смежные вопросы