Spring Security 配置类(SecurityConfig)
一、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 实现权限管理闭环。
- 用户登录后,
