Аутентификация Spring Security 5 всегда возвращает 302 - PullRequest
0 голосов
/ 03 мая 2018

Я использую Spring-Security 5 для защиты своего веб-приложения. Я захожу в /login.jsp и заполняю имя пользователя и пароль, затем нажимаю «Войти», чтобы отправить форму, а затем перенаправляется в /login.jsp. Я вижу, что код состояния ответа этого http-трафика в fiddler - 302. Я знаю, что при неудачной аутентификации вернется 302, но пароль и имя пользователя верны.

Класс SecurityConfig:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private DataSource dataSource;

    @Autowired
    protected SecurityConfig(DataSource dataSource
    ) {
        this.dataSource = dataSource;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login.jsp")
                .loginProcessingUrl("/login")
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
                .dataSource(dataSource)
                .usersByUsernameQuery("select name userName, password, enabled from user where name=?")
                .authoritiesByUsernameQuery("select name userName 'ROLE_USER' from user where name=?")
        ;
    }
}

таблица пользователей (mysql):

enter image description here

login.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c"
           uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<c:url value="/login" var="loginUrl"/>
<form action="${loginUrl}" method="post"> 1
    <c:if test="${param.error != null}"> 2
        <p>
            Invalid username and password.
        </p>
    </c:if>
    <c:if test="${param.logout != null}"> 3
        <p>
            You have been logged out.
        </p>
    </c:if>
    <p>
        <label for="username">Username</label>
        <input type="text" id="username" name="username"/> 4
    </p>
    <p>
        <label for="password">Password</label>
        <input type="password" id="password" name="password"/> 5
    </p>
    <button type="submit" class="btn">Log in</button>
</form>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

У меня была эта проблема, пока я не отключил csrf-check путем включения .csrf().disable() в configure (HttpSecurity) метод. Если у вас его нет, предоставьте токен csrf в качестве скрытого поля формы.

... хотя я вижу, что у вас отключено

0 голосов
/ 29 мая 2018

Используйте successHandler, чтобы установить истину referer. Это делает трюк для меня. Еще я получаю 302.

В securityConfig необходимо добавить следующий код.

@Override
protected void configure(HttpSecurity http) throws Exception {
http
  .authorizeRequests()
  .antMatchers("/login*")
  .permitAll()
  .anyRequest()
  .authenticated()
  .and()
  .formLogin()
  .successHandler(new RefererRedirectionAuthenticationSuccessHandler ());
}


import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;

public class RefererRedirectionAuthenticationSuccessHandler extends 
SimpleUrlAuthenticationSuccessHandler
    implements AuthenticationSuccessHandler {

public RefererRedirectionAuthenticationSuccessHandler() {
    super();
    setUseReferer(true);
}

}

}

Проверьте ссылку ниже: http://www.baeldung.com/spring-security-redirect-login

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...