本文将介绍 Spring Security,一个功能强大且高度可定制的身份验证和访问控制框架。
一、介绍
- Spring Security 是 Spring 家族的一员
- Spring Security 提供了一套 Web 应用安全性的完整解决方案
- Spring Security 功能强大且高度可定制
- Spring Security 的两个核心功能是:
- Spring Security 还支持攻击防护功能,包括:跨域保护、会话固定保护、安全请求头保护、HTTP 防火墙等
二、配置
1. 配置方式
Spring Security 通过配置类进行配置。
创建配置类,继承 WebSecurityConfigurerAdapter 类,使用 @EnableWebSecurity 注解即可。
WebSecurityConfigurerAdapter 类中有三个重载的 configure()
方法,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public abstract class WebSecurityConfigurerAdapter { ··· void configure(AuthenticationManagerBuilder auth) { } void configure(HttpSecurity http) { } void configure(WebSecurity web) { } ··· }
|
其中,
configure(AuthenticationManagerBuilder auth)
:用于配置身份验证
例如:
configure(HttpSecurity http)
:用于配置访问控制
例如:
- XX 资源需要 xx 权限才能访问
- 配置登录功能
- 配置登出功能
configure(WebSecurity web)
:用于对全局进行配置
例如:
3. 配置示例
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .passwordEncoder(密码加密器) .withUser(用户名) .password(密码加密器.encode("密码")) .roles(角色列表); auth.authenticationProvider(MyAuthenticationProvider); auth.userDetailsService(myUserDetailsService).passwordEncoder(密码加密器); }
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/index", "/login", "/error").permitAll() .antMatchers("/admin/**").hasRole("ADMIN") .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() { @Override public <O extends FilterSecurityInterceptor> O postProcess(O object) { object.setSecurityMetadataSource(mySecurityMetadataSource); object.setAccessDecisionManager(myAccessDecisionManager); return object; } }); http .formLogin() .loginPage("/login_p") .loginProcessingUrl("/login") .permitAll() .usernameParameter(自定义用户名参数) .passwordParameter(自定义密码参数); http .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login"); http .exceptionHandling() .authenticationEntryPoint(未登录异常处理类) .accessDeniedHandler(未授权异常处理类); http .csrf().disable(); http .cors(); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/static/**", "/favicon.ico"); } }
|
三、身份验证
Spring Security 身份验证
四、访问控制
Spring Security 访问控制
参考