三大核心
- webSecurityConfigurerAdapter:自定义security策略
- AuthenticationManagerBuilder:自定义认证策略
- @EnablewebSecurity:开启webSercurity
pom文件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
配置文件:
spring.security.user.name=admin
spring.security.user.password=admin
启动类:?
/**
* security安全框架
*/
@EnableWebSecurity
static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
// @Override
// protected void configure(HttpSecurity http) throws Exception {
// http.csrf().ignoringAntMatchers("/eureka/**");
// super.configure(http);
// }
//页面跳转限制用户
@Override
protected void configure(HttpSecurity http) throws Exception {
//首页所有人可以访问,功能页只有对应的权限才能进去
http.authorizeRequests()//授权请求方法
.antMatchers("/").permitAll()
//(role1可以访问views下的dome1下的所有页面)
.antMatchers("views/dome1/*").hasRole("role1")//什么角色可以访问什么位置
//(role2可以访问views下的dome2下的所有页面)
//配合前端,可以实现权限过滤,该展示那些页面,不该展示那些页面
.antMatchers("views/dome2/*").hasRole("role2");
//其他项的配置
//没有权限则默认跳转到登录页 "/toLogin"覆盖默认的登录页,访问改路径下的登录页(自己写的页面,比默认的好看)
http.formLogin().loginPage("/toLogin");
//开启网页注销功能
http.logout().logoutSuccessUrl("/");
//防止网站攻击 关闭csrf功能
http.csrf().disable();
//开启网页记住我按钮功能 本质是cookie,默认保证两周(默认页面) 自定义页面的remember需要传到这来
http.rememberMe().rememberMeParameter("remember");
}
//认证功能,身份验证机制
//springSecurity5.0+ 中新增了很多的加密方法,必须要给密码加密,否则报错 no PasswordEncoding
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
.withUser("zhangsan").password(new BCryptPasswordEncoder().encode("123456")).roles("role1","role2","role3")
.and()
.withUser("lisi").password(new BCryptPasswordEncoder().encode("123456")).roles("role1");
}
//忽略任何以”/resources/”开头的请求
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers( "/resources/**" );
}
}
WebSecurityConfigurerAdapter 这个接口里面的configure有三个重载:
- HttpSecurity http 允许基于选择匹配在资源级别配置基于Web的安全性-例如,以下示例将以/ admin /开头的URL限制为具有ADMIN角色的用户,并声明需要使用其他任何URL成功认证。
- AuthenticationManagerBuilder auth 用于通过允许轻松添加AuthenticationProviders来建立身份验证机制:例如,以下内容定义了具有内置“用户”和“管理员”登录名的内存中身份验证。
- WebSecurity web 用于影响全局安全性的配置设置(忽略资源,设置调试模式,通过实现自定义防火墙定义拒绝请求)。例如,以下方法将导致以/ resources /开头的任何请求都被忽略,以进行身份??验证。
|