Java Spring Security配置-多个身份验证提供程序

在Spring Security中,有多个身份验证提供程序的参考,但是找不到Java config中的示例。

以下链接给出了XML表示法: Spring Security中的多个身份验证提供程序

我们需要使用LDAP或DB进行身份验证

下面是我们的示例代码:

@Configuration

@EnableWebSecurity

public class XSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired

private AuthenticationProvider authenticationProvider;

@Autowired

private AuthenticationProvider authenticationProviderDB;

@Override

@Order(1)

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

auth.authenticationProvider(authenticationProvider);

}

@Order(2)

protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

auth.authenticationProvider(authenticationProviderDB);

}

@Override

public void configure(WebSecurity web) throws Exception {

web

.ignoring()

.antMatchers("/scripts/**","/styles/**","/images/**","/error/**");

}

______

@Override

@Order(1)

protected void configure(HttpSecurity http) throws Exception {

http.csrf().disable()

.authorizeRequests()

.antMatchers("/","/logout","/time").permitAll()

.antMatchers("/admin").hasRole("ADMIN")

.anyRequest().authenticated()

.and()

.formLogin()

.loginPage("/index")

.loginProcessingUrl("/perform_login")

.usernameParameter("email")

.passwordParameter("password")

.failureUrl("/index?failed=true")

.defaultSuccessUrl("/summary",true)

.permitAll()

.and()

.logout().logoutUrl("/logout")

.logoutSuccessUrl("/index?logout=true").permitAll()

.and()

.exceptionHandling().accessDeniedPage("/error403")

.and().authenticationProvider(authenticationProvider);

}

@Order(1)

protected void configureDB(HttpSecurity http) throws Exception {

http.csrf().disable()

.authorizeRequests()

.antMatchers("/","/logout").permitAll()

.anyRequest().authenticated()

.and()

.formLogin()

.loginPage("/index")

.loginProcessingUrl("/perform_login")

.usernameParameter("email")

.passwordParameter("password")

.failureUrl("/index?failed=true")

.defaultSuccessUrl("/summary",true)

.permitAll()

.authenticationProvider(authenticationProviderDB)

//This line giving compilation error stating authenticationProvider is not available in formloginconfigurer

.and()

.logout().logoutUrl("/logout")

.logoutSuccessUrl("/index?logout=true").permitAll()

.and()

.exceptionHandling().accessDeniedPage("/error403");

}

}

回答:

也许这会帮助你:

@Configuration

@EnableWebSecurity

@Profile("container")

public class XSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired

private AuthenticationProvider authenticationProvider;

@Autowired

private AuthenticationProvider authenticationProviderDB;

@Override

@Order(1)

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

auth.authenticationProvider(authenticationProvider);

}

@Order(2)

protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

auth.authenticationProvider(authenticationProviderDB);

}

@Override

public void configure(WebSecurity web) throws Exception {

web

.ignoring()

.antMatchers("/scripts/**","/styles/**","/images/**","/error/**");

}

@Override

public void configure(HttpSecurity http) throws Exception {

http

.authorizeRequests()

.antMatchers("/rest/**").authenticated()

.antMatchers("/**").permitAll()

.anyRequest().authenticated()

.and()

.formLogin()

.successHandler(new AuthenticationSuccessHandler() {

@Override

public void onAuthenticationSuccess(

HttpServletRequest request,

HttpServletResponse response,

Authentication a) throws IOException, ServletException {

//To change body of generated methods,

response.setStatus(HttpServletResponse.SC_OK);

}

})

.failureHandler(new AuthenticationFailureHandler() {

@Override

public void onAuthenticationFailure(

HttpServletRequest request,

HttpServletResponse response,

AuthenticationException ae) throws IOException, ServletException {

response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);

}

})

.loginProcessingUrl("/access/login")

.and()

.logout()

.logoutUrl("/access/logout")

.logoutSuccessHandler(new LogoutSuccessHandler() {

@Override

public void onLogoutSuccess(

HttpServletRequest request,

HttpServletResponse response,

Authentication a) throws IOException, ServletException {

response.setStatus(HttpServletResponse.SC_NO_CONTENT);

}

})

.invalidateHttpSession(true)

.and()

.exceptionHandling()

.authenticationEntryPoint(new Http403ForbiddenEntryPoint())

.and()

.csrf()//Disabled CSRF protection

.disable();

}

}

以上是 Java Spring Security配置-多个身份验证提供程序 的全部内容, 来源链接: utcz.com/qa/433776.html

回到顶部