概要
Spring Securityを用いてアプリ開発を行っています。
画面はユーザ一覧画面、ユーザ登録画面があると思ってください。
解決したい現象を説明します。
①AさんとBさんがログインして作業しています。
②AさんがBさんをユーザ一覧画面から削除しました。(物理削除)
③だけどBさんはユーザ登録画面にもいけるし、ユーザ一覧画面にもいけます。(登録はできません→userIdがないため)
Spring Securityは以下のコードをコーディングしています。
ログインのときはメールアドレスとパスワードで認証をしますが、
ログインしたあとの、リクエストするときには認証を行っていないため、上記のようなことが起こってしまいます。
Spring Securityコード
Java
1@Configuration 2@EnableWebSecurity 3public class SecurityConfigure extends WebSecurityConfigurerAdapter{ 4 5 @Autowired 6 private UserDetailsService userDetailsService; 7 8 @Override 9 public void configure(WebSecurity web) throws Exception { 10 web.ignoring() 11 .antMatchers("/css/**" 12 ,"/js/**" 13 ,"/static/**"); 14 } 15 16 @Override 17 protected void configure(HttpSecurity http) throws Exception { 18 http.authorizeRequests() 19 .antMatchers("/login/toLogin").permitAll() 20 .anyRequest().authenticated(); 21 22 http.formLogin() 23 24 .loginPage("/login/toLogin") 25 .loginProcessingUrl("/doLogin") 26 .failureUrl("/login/toLogin?error=true") 27 .defaultSuccessUrl("/users",true) 28 .usernameParameter("mailAddress") 29 .passwordParameter("password"); 30 31 http.logout() 32 .logoutRequestMatcher(new AntPathRequestMatcher("/logout**")) 33 .logoutSuccessUrl("/") 34 .deleteCookies("JSESSIONID") 35 .invalidateHttpSession(true); 36 } 37 38 @Override 39 public void configure(AuthenticationManagerBuilder auth) throws Exception { 40 auth.userDetailsService(userDetailsService) 41 .passwordEncoder(new BCryptPasswordEncoder()); 42 } 43 44 @Bean 45 public PasswordEncoder passwordEncoder() { 46 return new BCryptPasswordEncoder(); 47 } 48 49}
解決したいこと
毎回リクエストを送るたびに特定の処理をさせてから通常の処理を行いたいのですが、
どうやって実現すればいいでしょうか。
特定の処理では、ログインしているユーザーのメールアドレスを使ってuserテーブルからuserを取得します。
それがなかったらログアウトされる、といった処理を想定しています。
問題
Java
1@AuthenticationPrincipal LoginUser loginUser
Bさんが削除されたらこれがエラーになるかと思ったのですが、ログアウトしなければ
セッションが切れないため、これは普通にBさんの情報を取れてしまいます。
ご教授いただければと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/04 00:04