spring security 的核心功能主要包括:
认证 (你是谁) 授权 (你能干什么) 攻击防护 (防止伪造身份)
其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。

- <dependency>
- <groupId>org.springframework.security</groupId>
- <artifactId>spring-security-test</artifactId>
- <scope>test</scope>
- </dependency>
Copy to clipboardErrorCopied
Spring Security 的配置类,通过继承 WebSecurityConfigurerAdapter 类实现,可以重写一下三种方法。
- @Configuration
- @EnableWebSecurity
- @EnableGlobalMethodSecurity(prePostEnabled = true)
- public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
- @Override
- public void configure(AuthenticationManagerBuilder auth) throws Exception {
- //我代表代码
- }
- @Override
- public void configure(HttpSecurity http) throws Exception {
- //我代表代码
- }
- @Override
- public void configure(WebSecurity web) throws Exception {
- //我代表代码
- }
- }
Copy to clipboardErrorCopied
AuthenticationManagerBuilder 类用来配置全局的认证相关的信息:
AuthenticationProvider :认证服务提供者UserDetailsService :认证用户(及其权限)- @Override
- public void configure(AuthenticationManagerBuilder auth) throws Exception {
- // 添加后门
- auth.authenticationProvider(backdoorAuthenticationProvider);
- // 自定义AuthenticationProvider实例加入AuthenticationManager
- auth.userDetailsService(backendSysUserDetailsServiceImpl).passwordEncoder(new BCryptPasswordEncoder());
- auth.authenticationProvider(backendSysUserAuthenticationProvider);
- }
HttpSecurity 类负责具体的权限控制规则配置。每配置相当于 xml 配置中的一个标签。
各种具体的认证机制的相关配置,OpenIDLoginConfigurer、AnonymousConfigurer、FormLoginConfigurer、HttpBasicConfigurer LogoutConfigurer RequestMatcherConfigurer:spring mvc style、ant style、regex style HeadersConfigurer: CorsConfigurer、CsrfConfigurer SessionManagementConfigurer: PortMapperConfigurer: JeeConfigurer: X509Configurer: RememberMeConfigurer: ExpressionUrlAuthorizationConfigurer: RequestCacheConfigurer: ExceptionHandlingConfigurer: SecurityContextConfigurer: ServletApiConfigurer: ChannelSecurityConfigurer: 此模块的authenticationProvider和userDetailsService; SecurityFilterChain控制。
- @Override
- public void configure(HttpSecurity http) throws Exception {
- http
- .authorizeRequests()
- .antMatchers("/",
- "/index",
- "/error"
- ).permitAll()
- .antMatchers("/user/**").hasRole("USER")
- .antMatchers("/admin/**").hasRole("ADMIN")
- .and()
- .formLogin().loginPage("/login").defaultSuccessUrl("/user")
- //TODO 自定义参数名称,与login.html中的参数对应
- .usernameParameter("myusername").passwordParameter("mypassword")
- .and()
- .logout().logoutUrl("/logout").logoutSuccessUrl("/login")
- //鉴权
- .and()
- .authorizeRequests()
- .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
- @Override
- public
extends FilterSecurityInterceptor> O postProcess(O object) { - object.setSecurityMetadataSource(backendSysRoleSecurityMetadataSourceImpl);
- object.setAccessDecisionManager(backendSysRoleAccessDecisionManagerImpl);
- return object;
- }
- });
- }
WebSecurity 类负责全局请求忽略规则配置(比如静态文件、注册页面)、全局 HttpFirewall 配置、是否debug配置、全局SecurityFilterChain配置、privilegeEvaluator、expressionHandler、securityInterceptor。
-
- @Override
- public void configure(WebSecurity web) throws Exception {
- web.ignoring().antMatchers("/css/**", "/js/**");
- }