Я искал здесь, google и springsource для этого и не мог найти решение, которое сработало для меня. У меня есть ниже spring -security.xml и когда я использую шаблон
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
Это дает мне ошибку 404, когда она перенаправляется на страницу входа. Но этого не происходит, если я использую
<intercept-url pattern="/index*" access="hasRole('ROLE_USER')" />
Но, очевидно, это не защищает остальную часть приложения.
Я уверен, что это что-то простое, я не замечаю, но самое близкое, что я мог найти, это этот вопрос, который я уже ввел в свой XML файл ниже, но по-прежнему имеют одинаковую проблему. Я пробовал это без use-expressions="true"
, и я попытался переключить intercept-url
вокруг (я не 100%, но я уверен, что шаблон /**
должен быть последним, поскольку я считаю, что URL-адреса совпадают в одном и том же как указано)
Любые советы/помощь будут отличными
spring -security.xml
<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.0.3.xsd">
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/login" filters="none" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<form-login login-page="/login" default-target-url="/welcome"
authentication-failure-url="/loginfailed" />
<logout logout-success-url="/logout" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="username" password="password" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
Update
На всякий случай это фактор, который я использую Spring и Spring security 3.0.4.RELEASE
Ответ
Следуя совету Криса, я изменил
<intercept-url pattern="/login" filters="none" access="permitAll" />
в
<intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" />
Это вызвало ошибку 500 из-за исключения
SpelEvaluationException: EL1008E:(pos 0): Field or property
'IS_AUTHENTICATED_ANONYMOUSLY' cannot be found on object of
type'org.springframework.security.web.access.expression.WebSecurityExpressionRoot
Я решил это, изменив IS_AUTHENTICATED_ANONYMOUSLY
на isAnonymous()
<intercept-url pattern="/login" access="isAnonymous()" />