马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Spring Security是什么?
Spring Security就像你公司的“门禁体系”,专门管两件事——
你是谁(认证):每个员工进公司都要刷卡或刷脸,确认身份正当才气进。
你能去哪(授权):平凡员工只能进办公区,向导能进财政室,保洁阿姨能进堆栈——差异权限的人能去的地方不一样。
**技能表明:它是Spring官方推出的安全框架,前身叫Acegi Security,专门办理Java步调的身份验证(登录)、权限控制(谁能访问什么)、防攻击(防黑客)**等题目,相当于给步调加了一套“防盗门”。
二、Spring Security有什么用?
焦点功能
**登录认证:**支持用户名暗码、指纹、扫码、第三方登录(微信/钉钉)等方式,好比用户输错暗码3次就锁账号。
**权限管理:**控制差异用户能访问的页面或功能,好比平凡用户只能看商品,管理员能编削商品 。
**防攻击:**自动防CSRF(伪造哀求)、XSS(脚本攻击)、暴力破解等,像门禁体系能辨认假门卡。
实际场景
电商:用户登录后只能看本身的订单,管理员能看全部订单。
银行体系:利用转账必须二次验证(短信验证码)。
企业内部体系:差异部分员工只能访问本身部分的文件。
Spring Security怎么用?三步走:装门禁→定规则→发门卡
安装(装门禁)
添加依赖(类似买门禁装备):
在项目标pom.xml里加一行代码,引入Spring Security包:- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-security</artifactId>
- </dependency>
复制代码 加完依赖后,全部接口默认须要登录才气访问,账号是user,暗码在控制台随机天生。
设置规则(定权限)
创建立置类(定门禁规则)- @Configuration
- @EnableWebSecurity
- public class SecurityConfig extends WebSecurityConfigurerAdapter {
- @Override
- protected void configure(HttpSecurity http) throws Exception {
- http
- .authorizeRequests()
- .antMatchers("/home").permitAll() // 首页所有人能看
- .antMatchers("/admin/**").hasRole("ADMIN") // 管理员才能进后台
- .anyRequest().authenticated() // 其他页面需登录
- .and()
- .formLogin() // 开启登录页
- .loginPage("/login") // 自定义登录页地址
- .defaultSuccessUrl("/dashboard") // 登录后跳转
- .and()
- .logout().permitAll(); // 允许退出登录
- }
- }
复制代码 这段代码相当于规定:谁都能进/home页面;
只有管理员能进/admin开头的页面;
其他页面必须登录才气看 。
发门卡(用户权限)
内存用户(临时测试用):- @Override
- protected void configure(AuthenticationManagerBuilder auth) throws Exception {
- auth.inMemoryAuthentication()
- .withUser("张三").password("{noop}123").roles("USER")
- .and()
- .withUser("李四").password("{noop}admin").roles("ADMIN");
- }
复制代码 这段代码创建两个用户:张三(暗码123,平凡用户);李四(暗码admin,管理员)。
数据库用户(正式用):
实现UserDetailsService接口,从数据库查用户信息,好比:- @Service
- public class MyUserService implements UserDetailsService {
- @Autowired
- private UserRepository userRepo; // 假设用户存在数据库里
- @Override
- public UserDetails loadUserByUsername(String username) {
- User user = userRepo.findByUsername(username);
- return new org.springframework.security.core.userdetails.User(
- user.getUsername(),
- user.getPassword(),
- user.getRoles() // 角色列表(如ROLE_ADMIN)
- );
- }
- }
复制代码 注意事项
**别关CSRF防护:**默认开启的CSRF防护能防伪造哀求攻击,除非你明白知道本身在做什么。
**暗码必须加密:**别用明文存暗码,保举用BCryptPasswordEncoder加密(好比{bcrypt}$2a101010…)。
**权限分配最小化:**平凡用户只管少给权限,制止被黑客利用后造成更大丧失。
实用场景:全部须要登录和权限控制的体系,好比电商、银行、OA体系。
|