一、Spring Security 配置类(SecurityConfig)
1. 核心配置解析
java
运行
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
public static void main(String[] args) {
// 生成加密密码(BCrypt算法)
String mszlu = new BCryptPasswordEncoder().encode("mszlu");
System.out.println(mszlu);
}
@Override
public void configure(WebSecurity web) throws Exception {
super.configure(web);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// 角色权限控制:/user/findAll 需admin角色
.antMatchers("/user/findAll").hasRole("admin")
// 静态资源放行:css、img、js、plugins无需认证
.antMatchers("/css/**", "/img/**", "/js/**", "/plugins/**").permitAll()
// 自定义权限校验:/admin/** 接口通过authService的auth方法判断权限
.antMatchers("/admin/**").access("@authService.auth(request, authentication)")
// /pages/** 接口需登录认证
.antMatchers("/pages/**").authenticated()
.and()
// 表单登录配置
.formLogin()
.loginPage("/login.html") // 自定义登录页
.loginProcessingUrl("/login") // 登录请求接口
.usernameParameter("username") // 登录用户名参数名(默认username)
.passwordParameter("password") // 登录密码参数名(默认password)
.defaultSuccessUrl("/pages/main.html") // 登录成功跳转页
.failureUrl("/login.html") // 登录失败跳转页
.permitAll()
.and()
// 退出登录配置
.logout()
.logoutUrl("/logout") // 退出请求接口
.logoutSuccessUrl("/login.html") // 退出成功跳转页
.permitAll()
.and()
.httpBasic();
}
}
2. 关键配置说明
- 密码加密 :使用
BCryptPasswordEncoder,通过encode()方法对密码进行不可逆加密,避免明文存储; - 权限控制方式 :
- 角色控制:
hasRole("admin"),用户需拥有admin角色才能访问; - 自定义权限:
@authService.auth(request, authentication),通过自定义 Service 方法实现复杂权限校验; - 静态资源放行:
permitAll(),无需认证即可访问; - 认证访问:
authenticated(),用户登录后即可访问;
- 角色控制:
- 表单登录流程 :
- 登录请求提交到
/login接口; - 参数名分别为
username和password; - 成功跳转
/pages/main.html,失败跳转回登录页;
- 登录请求提交到
- 退出登录 :请求
/logout接口,成功后跳转到登录页。
二、后台权限管理控制器(AdminController)
1. 接口定义解析
java
运行
@RestController
@RequestMapping("admin")
public class AdminController {
@Autowired
private PermissionService permissionService;
// 分页查询权限列表
@PostMapping("permission/permissionList")
public Result listPermission(@RequestBody PageParam pageParam) {
return permissionService.listpermission(pageParam);
}
// 新增权限
@PostMapping("permission/add")
public Result add(@RequestBody Permission permission) {
return permissionService.add(permission);
}
// 更新权限
@PostMapping("permission/update")
public Result update(@RequestBody Permission permission) {
return permissionService.update(permission);
}
// 删除权限
@GetMapping("permission/delete/{id}")
public Result delete(@PathVariable("id") Long id) {
return permissionService.delete(id);
}
}
2. 接口功能说明
表格
| 接口路径 | 请求方式 | 功能说明 | 请求参数 |
|---|---|---|---|
/admin/permission/permissionList |
POST | 分页查询权限列表 | PageParam(分页参数:页码、页大小等) |
/admin/permission/add |
POST | 新增权限 | Permission(权限实体:名称、标识、路径等) |
/admin/permission/update |
POST | 更新权限 | Permission(权限实体:含 ID) |
/admin/permission/delete/{id} |
GET | 删除权限 | id(权限 ID,路径变量) |
三、关联与补充
-
权限校验流程:
- 用户登录后,
Spring Security生成Authentication对象,包含用户角色 / 权限信息; - 访问
/admin/**接口时,触发@authService.auth(request, authentication)校验; PermissionService实现权限 CRUD,配合 Security 实现权限管理闭环。
- 用户登录后,