Я использую Spring Security 2.x уже некоторое время, но недавно я переключился на 3.x. Я всегда использую собственную реализацию интерфейса UserDetails
и аутентификацию против БД.Отсутствует ROLE_ANONYMOUS весной Безопасность
Все работает нормально (вход в систему, выход из системы, фильтры URL, просмотр имени пользователя авторизованного пользователя и т. Д.).
Осталось только показать сообщение «Пожалуйста, войдите», если пользователь не авторизовался. Я пробовал несколько подходов:
<sec:authorize access="not isAnonymous()">
or
<sec:authorize access="hasRole('ROLE_ANONYMOUS')">
etc.
Ни один из них не работал. Наконец, я добавил <sec:authentication property="principal.authorities" />
на выход моей домашней страницы, чтобы отлаживать, какие роли у пользователя действительно есть. Это то, что я вижу:
- Зарегистрированный пользователь -
[ROLE_USER, ROLE_ADMIN]
- Неразрешенное пользователя - `` < - пустая строка
Похоже, что я каким-то образом потерял власть по умолчанию ROLE_ANONYMOUS
, который всегда был добавлен Весна, если я правильно помню. Это что-то недавно упало или что-то еще? Возможно, мне придется позаботиться об этом анонимном доступе каким-то другим способом?
Соответствующая часть контекста безопасности:
<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"
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">
<!-- UNPROTECTED RESOURCES -->
<http pattern="/" security="none"/>
<http pattern="/favicon.ico" security="none"/>
<http pattern="/home" security="none"/>
<http pattern="/login*" security="none"/>
<http pattern="/resources/**" security="none"/>
<!-- PROTECTED RESOURCES -->
<http auto-config='true' use-expressions="true">
<intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/admin/**" access="hasRole('ROLE_USER,ROLE_ADMIN')"/>
<form-login login-page="/login" default-target-url="/dashboard" authentication-failure-url="/login?login_error=true"/>
<logout logout-url="/logout"/>
</http>
<beans:bean id="userAccountsAuthenticationProvider" class="pl.xxx.utils.UserAccountsAuthenticationProvider" />
<beans:bean id="saltSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
<beans:property name="userPropertyToUse" value="salt" />
</beans:bean>
<authentication-manager>
<authentication-provider user-service-ref="userAccountsAuthenticationProvider">
<password-encoder ref="standardPasswordEncoder"/>
</authentication-provider>
</authentication-manager>
</beans:beans>
Добавлен контекст безопасности. Как вы можете видеть, я использую 'auto-config', но не' 'или пользовательские фильтры.Также '' работает, но ваш пример с параметром 'isAuthenticated' не имеет значения. Странный. –
Моя ошибка - ваше решение с передающим значением 'isAuthenticated()' переменной и проверкой его в 'if' statement работает! Но это еще не ответило на мой вопрос: что случилось с «ROLE_ANONYMOUS»? –
Другими словами: ' ' Этот фрагмент ВСЕГДА показывает мне: 'false '. –