2014-10-28 3 views
0

У меня есть следующая настройка безопасности на двухстраничном базовом веб-сайте.Весна Безопасность фильтрует каждый случай

<http use-expressions="true"> 
    <intercept-url pattern="/login*" access="permitAll" /> 
    <intercept-url pattern="/resources/**" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" /> 
    <form-login login-page='/login.jsp' 
     default-target-url="/index.jsp"   
     username-parameter="name" 
     password-parameter="password"/> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <user-service> 
      <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" /> 
      <user name="user" password="user" authorities="ROLE_USER" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

Я не пользуюсь пользовательскими контроллерами, используя разрешение по умолчанию для весеннего просмотра.

<mvc:annotation-driven /> 
<mvc:resources location="/resources/" mapping="/resources/**"/> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/view/"/> 
     <property name="suffix" value=".jsp"/> 
</bean> 

При попытке доступа к странице index.jsp по умолчанию он перенаправляет меня на login.jsp страницы, как я ожидал, но когда я ставлю в данной форме он не посылает меня на index.jsp страницы снова перенаправляет меня до login.jsp. Поля формы определяются с помощью name как showin в конфигурации безопасности, а форма action - index.jsp.

Мои login.jsp Форма:

<form method="post" action="<c:url value = '/index.jsp' />"> 
    <label for="inputEmail3">User</label> 
    <input name="name" type="text" id="inputEmail3" placeholder="User name" required> 

    <label for="inputPassword3">Password</label> 
    <input name="password" type="password" id="inputPassword3" placeholder="Password" required> 
    <button type="submit" class="btn btn-success btn-sm">Sign in</button> 
    <button type="reset" class="btn btn-default btn-sm">Reset</button> 
</form> 

Что мне не хватает?

+0

Не могли бы вы показать 'login.jsp'? (Я предполагаю, что есть один, поскольку вы используете имена настраиваемых параметров) –

+0

Теперь я показываю форму в login.jsp. –

+0

И зачем ему это делать. Почему форма отправляется на 'index.jsp'? Это должно быть нечто вроде 'j_spring_security_check'. –

ответ

1

Spring security использует фильтры, включая регистрацию формы. По умолчанию, когда требуется аутентификация пользователя, DefaultLoginPageGeneratingFilter создает страницу, содержащую HTML-форму, но вы можете использовать ее.

Затем UsernamePasswordAuthenticationFilter перехватывает отправку формы по умолчанию по адресу j_spring_security_check, а форма должна быть отправлена ​​с помощью функции POST или весной (по умолчанию) выбрасывает исключение.

Вы должны использовать выделенный URL для отправки формы входа в систему. Если вам не нравится j_spring_security_check, вы можете изменить его с помощью атрибута входа в форму login-processing-url, но он должен не быть таким же, как URL успеха.

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