首页 > 其他分享 >8、集成SpringSecurity安全框架---登录请求放行配置

8、集成SpringSecurity安全框架---登录请求放行配置

时间:2024-09-28 15:45:15浏览次数:5  
标签:return 请求 jwt SpringSecurity --- 放行 sysUserinfo login public

@Configuration
public class SecurityConfig {
    // 创建 BCryptPasswordEncoder 注入容器,密码加密
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    // 登录时调用一次AuthenticationManager.authenticate 执行一次校验
    // authenticate
    @Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception {
        return config.getAuthenticationManager();
    }

    // 登录请求放行配置
    // SecurityFilterChain 一个表示安全过滤器链的对象
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
        // 关闭csrf机制
        http.csrf(csrf -> csrf.disable());
        /**
         * 配置请求拦截方式,
         * requestMatchers 表示某个请求不需要进行身份校验
         * authorizeHttpRequests 配置请求的授权规则,.anyRequest().authenticated() 表示任何请求都需要经过身份验证
         * permitAll 随意访问
         */
        http.authorizeHttpRequests(auth -> auth.requestMatchers("/user/login")
                .permitAll()
                .anyRequest()
                .authenticated()
        );
        return http.build();
    }
}

service

@Service
public class LoginServiceImpl implements LoginService {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public String login(SysUserinfo sysUserinfo) {
         //用户认证
        // 1. 封装 authentication 对象
        UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(sysUserinfo.getUsername(),sysUserinfo.getPassword());
        // 2. 进行校验
        Authentication authentication = authenticationManager.authenticate(authenticationToken);
        //认证没有通过
        if (Objects.isNull(authentication)){
            throw new RuntimeException("登录失败");
        }
        //认证通过,获取放入的用户信息
        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
        // 生成JWT,使用fastjson方法,把对象转为字符串
        String jsonString = JSON.toJSONString(loginUser);
        // 调用jwt工具类,生成jwt令牌
        String jwt = JwtUtil.createJWT(jsonString, null);
        return jwt;
    }
}

controller

@RestController
@RequestMapping("/user")
public class LoginController {

    @Autowired
    private LoginService loginService;

    @PostMapping("/login")
    public ResultVO login(@RequestBody SysUserinfo sysUserinfo) {
        String jwt = loginService.login(sysUserinfo);
        if (StringUtils.hasLength(jwt)){
            // ResultVO 自定义响应类
            return ResultVO.success(jwt);
        }

        return ResultVO.fail("err");
    }

}

测试

使用postman,点击body,选用json格式,输入用户名密码

 

标签:return,请求,jwt,SpringSecurity,---,放行,sysUserinfo,login,public
From: https://www.cnblogs.com/wangdch/p/18438036

相关文章

  • 折腾笔记[1]-打包ffmpeg-cli到单个wasm二进制
    摘要使用c2w打包ffmpeg-cli到单个wasm二进制,实现ffmpeg可执行文件平台无关运行(BuildOnce,RunAnywhere)。AbstractUsingc2wtopackagetheffmpeg-cliintoasinglewasmbinary,achievingplatform-independentexecutionoftheffmpegexecutable(BuildOnce,RunA......
  • 信息学奥赛复赛复习06-CSP-J2020-02直播获奖-向上取整、向下取整、整数除法、最大值、
    PDF文档公众号回复关键字:2024092812020CSP-J题目1优秀的拆分[题目描述]NOI2130即将举行。为了增加观赏性,CCF决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为w%,即当前排名前w%的选手的最低成绩就是即时的分数线更具体地,若当前已评出了p个......
  • 数据库技术提升-MySQL数据库原理、设计与应用【1.4】
    4.新增字段对于已经创建好的数据表,也可以根据业务需求利用ADD新增字段,基本语法格式如下·语法格式1:新增一个字段,并可指定其位置ALTERTABLE数据表名ADD[COLUMN]新字段名字段类型[FIRSTIAFTER字段名]语法格式2:同时新增多个字段ALTERTABLE数据表名ADD[COLUM......
  • 数据库技术提升-MySQL数据库原理、设计与应用【1.6】
    3.1.3字符串类型MySQ1.中的字符串类型分为CHAR、VARCHAR、TEXT等多种类型,不同数据类型具有不同的特点,具体如表3-5所示。1.CHAR和VARCHAR类型CHAR和VARCHAR类型都用来保存字符串数据。不同的是,VARCHAR可以存储可变长度的字符串。在MySQ1.中,定义CHAR和VARCH......
  • 数据库技术提升-MySQL数据库原理、设计与应用【1.5】
    第3章数据类型与约束学习目标掌握MySQL中常用数据类型的使用掌握MySQl.中常用的束的使用掌握MySQL中字符集的设置与处理        在数据库中,数据表用来组织和保存各种数据,它是由表结构和数据组成的。在设计表结构时,经常需要根据实际需求,选择合适的数据类型......
  • 蓝桥杯--STM32G431RBT6(TIM定时器的输出频率和占空比,含详细原理介绍和使用方法)
    目录一、前言二、代码实现功能:​编辑按如图配置定义变量编写执行代码 显示在LCD上加入按键效果三、效果展示四、代码开源 一、前言ARR即自动重装载值(AutoReloadRegister)。相当于一个水杯,水杯容量,水满为一个周期,倒掉重新滴水。它是一个用于指定特定数值的参......
  • CMake构建学习笔记18-cpp-httplib库的构建
    cpp-httplib库是笔者认为的一个比较好用的基于C++的Http服务器组件,与Eigen一样,它也是基于头文件的库,我们只需要引入httplib.h这个头文件进行来就实现所有基于http/https协议的功能,非常适合初学者进行使用。尽管是头文件,还是可以使用CMake进行构建,便于统一管理,关键脚本如下:#配置......
  • VulnHub-SickOs1.1靶机笔记
    SickOs1.1靶机笔记概述Vulnhub的靶机sickos1.1主要练习从互联网上搜索信息的能力,还考察了对代理使用,目录爆破的能力,很不错的靶机靶机地址:链接:https://pan.baidu.com/s/1JOTvKbfT-IpcgypcxaCEyQ?pwd=ytad提取码:ytad一、nmap扫描1)主机发现sudonmap-sn192.168.111.0/......
  • 数据库 - MySQL的事务
    目录前言一、事务的特性(一)原子性(二)一致性(三)隔离性(四)持久性二、事务的控制语句三、事务隔离级别(一)读未提交(二)读已提交(三)可重复读(四)可序列化四、使用场景五、事务操作(一)开启事务(二)提交事务(三)回滚事务(四)示例六、自动提交模式七、隐式提交八、提交前的保存点......
  • Springboot轮滑竞赛管理系统gsj4e--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,比赛信息,比赛报名,比赛分类,成绩公布,裁判,评审打分,比赛通知,作品提交,奖项信息,比赛奖励开题报告内容一、课题名称轮滑竞赛管理系统开发与应用二、研......