私はスプリングブートアプリケーションを持っています。私は、システム内の2つの異なるユーザーセットに対して2つのログインページを持っています。スプリングブート:2つのURLの2つの異なるログインページ
/expert
で始まるURL、ユーザーはEXPERT
やADMIN
のいずれかの役割を持っている必要があります。ユーザーはフォームログインを使用してシステムにログインし、ログインページパスは/login
です。css
、js
など一部のURLでは、認証が不要です。他のすべてのURLでは、ユーザーは特別な役割を必要とせず、認証で十分です。ユーザーのログインページは
/loginTwo
である必要があります。
私はこれを実装するためにthis stackoverflowの質問とthisドキュメントを見ました。しかし、/expert
を含むURLにアクセスすると、/login
ではなく、ログインページ/loginTwo
に移動します。ここで
は、以下の私のコードです:
@Autowired
@Qualifier("userService")
UserDetailsService userDetailsService;
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder encoder = new Md5PasswordEncoder();
return encoder;
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Configuration
@Order(1)
public static class ExpertWebSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login/**").permitAll();
http
.antMatcher("/expert/**")
.authorizeRequests()
.anyRequest().access("hasRole('ROLE_ADMIN') or hasRole('ROLE_EXPERT')")
.and()
.formLogin()
.loginPage("/login").permitAll();
}
}
@Configuration
public static class StudentWebSecurity extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("Here in stu");
http
.authorizeRequests()
.antMatchers("/css/**,/js/**").permitAll()
.antMatchers("/error/**").permitAll()
.antMatchers("/student/**").permitAll()
.antMatchers("/filter/**").permitAll()
.antMatchers("/loginTwo").permitAll()
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_EXPERT')")
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and()
.csrf();
http
.formLogin()
.loginPage("/loginTwo").permitAll()
.and()
.logout().permitAll();
http
.sessionManagement()
.maximumSessions(20)
.expiredUrl("/loginTwo")
.maxSessionsPreventsLogin(false);
http
.headers().addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsMode.SAMEORIGIN));
}
}
はこれで私を助けるためにあなたを要求します。