Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@teufelj

Spring Securityのフォーム認証エラーでユーザーを保持

Spring Securityのフォーム認証で認証できなかった場合、ユーザーとパスワードのフィールド両方がクリアされます。セキュリティ的にはその方がよいのかもしれませんが、やっぱり不便なのでユーザーは残すような方法を考えてみました。

ログイン失敗時にユーザーを何らかの形で保持しておけばよいので、今回は手っ取り早くクエリパラメータにusername=ユーザーで保持する様にします。ユーザーを保持できればよいので、リクエストスコープやセッションスコープを使っても実現できると思います。

formLoginの設定でfailureHandlerを設定し、URLを組み立ててリダイレクトするようにします。

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/css/**", "images/**").permitAll()
                .antMatchers("/**").authenticated()
                .and()
            .formLogin()
                .loginPage("/loginForm")
                .defaultSuccessUrl("/", true)
                .loginProcessingUrl("/login")
                .usernameParameter("username")
                .passwordParameter("password")
                .failureHandler((req, res, exp) -> {
                    res.sendRedirect("/loginForm?error=true&username=" + req.getParameter("username"));
                })
                .permitAll()
                .and()
            .logout()
                .logoutSuccessUrl("/loginForm");
    }
}

ビューにThymeleafを使う場合は

<input type="text" placeholder="ユーザー" name="username"
  th:value="${param.username != null } ? ${param.username[0]} : ''"/>

こんな感じでクエリパラメータを設定すれば、ログイン失敗時にユーザーが保持されます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?