В вашей конфигурации Вы требуете от пользователя всегда аутентификации при вводе любого URL на вашем сайте:
<security:intercept-url pattern="/**" access="ROLE_USER" />
Я думаю, вы должны разрешить пользователюбыть неаутентифицированным при входе на страницу входа :
<security:intercept-url pattern="/your-login-page-url" access="ROLE_ANONYMOUS" />
<security:intercept-url pattern="/your-login-process-url" access="ROLE_ANONYMOUS" />
<security:intercept-url pattern="/your-login-failure-url" access="ROLE_ANONYMOUS" />
<security:intercept-url pattern="/**" access="ROLE_USER" />
Если вы используете URL, такие как: /login/start
, /login/error
и /login/failure
Вы можете иметь:
<security:intercept-url pattern="/login/**" access="ROLE_ANONYMOUS" />
<security:intercept-url pattern="/**" access="ROLE_USER" />
Обновление:
Наличие этой конфигурации должно сделать платформу для перенаправления всех неаутентифицированных (анонимных) пользователей на страницу входа и всех аутентифицированных на AccessDeniedHandler . AccessDeniedException является одной из основных частей платформы, и игнорирование ее не является хорошей идеей.Трудно помочь больше, если вы предоставляете только части конфигурации Spring Security.
Обязательно прочитайте JavaDoc для ExceptionTranslationFilter для подробного объяснения того, какие исключения генерируются платформой, почему икак обрабатываются по умолчанию.
Если возможно, попробуйте удалить как можно больше пользовательских частей, например AuthenticationSuccessHandler , RememberMeAuthenticationFilter и AccessDeniedHandler ипосмотреть, если проблема пессист?Постарайтесь получить минимальную согласованность и шаг за шагом добавьте новые функции, чтобы увидеть, откуда возникла ошибка.
Одна важная вещь, которую вы не упоминаете в своем вопросе, - что является результатом этого сообщения об ошибке?Вы получаете HTTP 500
?Или HTTP 403
?Или Вас перенаправляют на страницу входа в систему?
Если, как Вы упомянули в вопросе, пользователь не прошел проверку подлинности и его / ее перенаправляют на страницу входа в систему, чем он должен работать.Похоже, вы получаете сообщение об ошибке, зарегистрированное ExceptionTranslationFilter: 172 только потому, что для уровня DEBUG
установлены классы Spring Security.Если это так, то это также то, как это должно работать, и если Вы не хотите, чтобы ошибка регистрировалась, тогда просто поднимите уровень регистрации для классов Spring Secyruty.
Обновление 2:
Шаблоны с filters="none"
должны соответствовать атрибутам login-page
, login-processing-url
и authentication-failure-ur
, установленным в <security:form-login />
, чтобы пропустить все проверки SpringSecurity на страницах, которые отображают страницу входа и обрабатывают вход в систему.
<security:http auto-config='true'>
<security:intercept-url pattern="/static/**" filters="none"/>
<security:intercept-url pattern="/index" filters="none"/>
<security:intercept-url pattern="/j_spring_security_check" filters="none"/>
<security:intercept-url pattern="/**" access="ROLE_USER" />
<security:form-login login-page="/index"
default-target-url="/home" always-use-default-target="true"
authentication-success-handler-ref="AuthenticationSuccessHandler"
login-processing-url="/j_spring_security_check"
authentication-failure-url="/index?error=true"/>
<security:remember-me key="myLongSecretCookieKey" token-validity-seconds="1296000"
data-source-ref="jdbcDataSource" user-service-ref="AppUserDetailsService" />
<security:access-denied-handler ref="myAccessDeniedHandler" />
</security:http>