在web开发中,安全第一位!常见的有过滤器,拦截器等。使用Spring Secruity的原因有很多,但大部分都是发现了javaEE的Servlet规范或EJB规范中的安全功能缺乏典型企业应用场景。同时认识到他们在WAR或EAR级别无法移植。因此如果你更换服务器环境,还有大量工作去重新配置你的应用程序。使用Spring Security 解决了这些问题,也为你提供许多其他有用的、可定制的安全功能。
一、背景
关于安全方面的两个主要区域是“认证”和“授权”(或者访问控制)。这两点也是Spring Security重要核心功能。“认证”,是建立一个他声明的主体的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统),通俗点说就是系统认为用户是否能登录。“授权”指确定一个主体是否允许在你的应用程序执行一个动作的过程。通俗点讲就是系统判断用户是否有权限去做某些事情。
做网站:安全应该什么时候考虑?设计之初!
- 漏洞,隐私泄露
- 架构一旦确定
1)认证
- 确认用户的身份
2)鉴权(授权)
- 功能权限
- 访问权限
- 菜单权限
二、SpringSecurity简介
2.1 SpringSecurity介绍
SpringSecurity是针对Spring项目的安全框架,也是springboot底层安全模块默认的技术选型,可以实现强大的Web安全控制。对于安全控制,仅需在pom.xml配置文件引入spring-boot-starter-security模块,即可实现强大的安全管理!
- WebSecurityConfigurerAdapter:自定义Security策略
- AuthenticationManagerBuilder:自定义认证策略
- @EnableWebSecurity:开启WebSecurity模式
2.2 SpringSecurity作用
SpringSecurity的两个主要目标是“认证”和“授权”(访问控制)。
- “认证”(Authentication)
- “授权”(Authorization)
1)pom.xml配置
<!-- SpringSecurity -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2)测试代码
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//授权
@Override
protected void configure(HttpSecurity http) throws Exception {
//首页所有人可以访问,功能页只有对应权限的人才能访问
//请求授权的规则
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/level1/**").hasRole("vip1")
.antMatchers("/level2/**").hasRole("vip2")
.antMatchers("/level3/**").hasRole("vip3");
//没有权限默认会跳转到登录页面
//开启登录页面
http.formLogin();
//注销
http.logout();
}
//认证
//最新版本springboot
//密码编码: PasswordEncoder
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
//这些数据正常应该从数据库中获取
auth.inMemoryAuthentication()
.passwordEncoder(new BCryptPasswordEncoder())
.withUser("XiaoChen")
.password(new BCryptPasswordEncoder()
.encode("123456")).roles("vip2","vip3")
.and()
.withUser("root")
.password(new BCryptPasswordEncoder()
.encode("123456")).roles("vip1","vip2");
}
}