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接口;
    • 参数名分别为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,路径变量)

三、关联与补充

  1. 权限校验流程:

    1. 用户登录后,Spring Security生成Authentication对象,包含用户角色 / 权限信息;
    2. 访问/admin/**接口时,触发@authService.auth(request, authentication)校验;
    3. PermissionService实现权限 CRUD,配合 Security 实现权限管理闭环。
相关推荐
wuminyu5 小时前
JVM规范学习总结:解释器与JIT编译器如何处理JVM字节码
java·linux·c语言·jvm·c++
txxzjmzlh5 小时前
SpringBoot 配置⽂件
java·spring boot·spring
ZhengEnCi6 小时前
模型训练完整流程:从数据准备到模型上线的 10 个关键步骤(全文可跑)
后端·算法
王中阳Go6 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 搜索附近的功能概述和分析
java·开发语言·交友
程序猿DD6 小时前
OctaFuse Gateway 2.18.0:MCP 接入支持 OAuth,供应商粘性绑定可视化管理
后端
骑着蜗牛撵大象3276 小时前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
独泪了无痕6 小时前
Hutool之LocalDateTimeUtil:让时间间隔操作如虎添翼
java
三无少女指南7 小时前
从这里开始:Java 后端与 AI 工程的三条阅读路线
java·学习路线·ai工程
ZhengEnCi8 小时前
Agent 规则管理:让 Memory 做索引、让 Skill 存规则——上下文上限实测与分工方案
后端