小程序代理能赚钱吗搜索引擎优化师工资
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}$2a 10 10 10…)。
**权限分配最小化:**普通用户尽量少给权限,避免被黑客利用后造成更大损失。
适用场景:所有需要登录和权限控制的系统,比如电商、银行、OA系统。