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 实现权限管理闭环。
相关推荐
唠点键盘之外的11 分钟前
26 向量数据库实战:从 0 搭一条能用的检索链路(pgvector + Spring AI)
数据库·人工智能·spring
高频因子挖掘机1 小时前
只取最近 60 个交易日,却每次拉全历史:量化脚本变慢的原因与改法
后端·github·api
鬼手点金1 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
孟健2 小时前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
paopaokaka_luck2 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
码事漫谈2 小时前
丢得静悄悄,谈一谈 Agent 的记忆是怎么没的
后端
迪飞特科技2 小时前
智慧物业平台实战:Spring Boot 整合小程序实现报修巡检费用全流程
spring boot·后端·小程序
考虑考虑2 小时前
@JsonInclude注解使用
spring boot·后端·spring
Wang's Blog3 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog3 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友