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()方法对密码进行不可逆加密,避免明文存储;
  • 权限控制方式
    1. 角色控制:hasRole("admin"),用户需拥有admin角色才能访问;
    2. 自定义权限:@authService.auth(request, authentication),通过自定义 Service 方法实现复杂权限校验;
    3. 静态资源放行:permitAll(),无需认证即可访问;
    4. 认证访问:authenticated(),用户登录后即可访问;
  • 表单登录流程
    • 登录请求提交到/login接口;
    • 参数名分别为usernamepassword
    • 成功跳转/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,路径变量)

三、关联与补充

  1. 权限校验流程

    1. 用户登录后,Spring Security生成Authentication对象,包含用户角色 / 权限信息;
    2. 访问/admin/**接口时,触发@authService.auth(request, authentication)校验;
    3. PermissionService实现权限 CRUD,配合 Security 实现权限管理闭环。
相关推荐
lfwh1 小时前
探针程序技术解析:基于 Spring Boot 非 Web 模式的云服务监控告警系统
前端·spring boot·后端
weixin199701080161 小时前
[特殊字符] 1688开放平台API Sign签名算法详解(Java / Python / PHP 实现)
java·python·算法
武子康1 小时前
Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理
java·后端
未若君雅裁1 小时前
JVM 垃圾回收算法与分代回收机制
java·jvm·算法
ikoala1 小时前
Codex 不得不装的 12 个插件,都在这了
前端·javascript·后端
摇滚侠1 小时前
SpringMVC 入门到实战 简介和入门案例 01-13
java·后端·spring·intellij-idea
未若君雅裁1 小时前
JVM 垃圾回收器全景与G1深度解析
java·开发语言·jvm
霸道流氓气质1 小时前
Java 大数据量异步处理方案:线程池 vs 消息队列
java·开发语言
devilnumber1 小时前
想真正吃透 + 灵活运用 Java 代理模式
java·开发语言·代理模式