2013-12-23 3 views
1

Я разрабатываю приложение Spring MVC/Spring Security.Redirect loop в приложении Spring Security

У меня нет никаких исключений или ошибок, но на одной из страниц есть цикл перенаправления.

Я использую Spring 3.0.1 и Spring Security 3.0.1.

Мои dispatcher-security.xml:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:security="http://www.springframework.org/schema/security" 
    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.xsd"> 

    <security:http auto-config="true" use-expressions="true"> 
     <security:form-login login-page="/login" default-target-url="/login" authentication-failure-url="/fail2login"/> 
     <security:logout logout-success-url="/"/> 
     <security:intercept-url pattern="/auth/**" access="hasRole('ANONYMOUS')" /> 
     <security:intercept-url pattern="/js/**" access="hasRole('ANONYMOUS')" /> 
     <security:intercept-url pattern="/css/**" access="hasRole('ANONYMOUS')" /> 
     <security:intercept-url pattern="/**" access="hasRole('ADMIN')" /> 
    </security:http> 

    <security:authentication-manager> 
     <security:authentication-provider> 
     <security:jdbc-user-service data-source-ref="dataSource1" 
      users-by-username-query=" select name,password,enabled from user where name=?"  
      authorities-by-username-query="select u.name, r.role from user u, role r where u.role = r.auto_id and u.name =? " 
     /> 
     </security:authentication-provider> 
    </security:authentication-manager> 

</beans> 

Пожалуйста, помогите мне ......

ответ

0

Атрибут default-target-url определяет страницу, на которой пользователь перенаправляется в случае успешной регистрации. Обычно это главная страница вашего приложения. У вас есть default-target-url="/login", поэтому он перенаправляет вас обратно на страницу входа после успешного входа в систему.

Я не понимаю значение роли ANONYMOUS в вашем примере. Если это роль для анонимных пользователей, я думаю, что это называется ROLE_ANONYMOUS. В этом случае вы, вероятно, использовать его неправильно, и эти две линии:

<security:intercept-url pattern="/js/**" access="hasRole('ANONYMOUS')" /> 
<security:intercept-url pattern="/css/**" access="hasRole('ANONYMOUS')" /> 

должны быть заменены на что-то вроде этого:

<security:intercept-url pattern="/js/**" access="hasRole('ROLE_ANONYMOUS') or hasRole('ROLE_USER')" /> 
<security:intercept-url pattern="/css/**" access="hasRole('ROLE_ANONYMOUS') or hasRole('ROLE_USER')" /> 

В противном случае unauthontificated пользователи ТОЛЬКО будет иметь возможность получить доступ к /js/ и /css/ каталогов.

ROLE_USER Не встраиваемая роль, это роль, которую вы определяете вручную для всех пользователей, прошедших проверку подлинности.

Смотрите также:

What is the difference between ROLE_USER and ROLE_ANONYMOUS

The Spring Security Reference: Anonymous Authentication

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