首页 > 其他分享 >springboot3项目的搭建四(security登录认证配置)

springboot3项目的搭建四(security登录认证配置)

时间:2024-05-31 21:33:25浏览次数:19  
标签:UserDetailsService 验证 认证 springboot3 https 过滤器 security UserDetails

springboot3项目的搭建四(security登录认证配置)

 

 

            <!--security安全配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
                <version>${springboot.version}</version>
            </dependency>

 

给项目引入security安全依赖后,默认以web形式拦截所有请求. (这是就需要配置,设置一些参数和开放登录的路径)

security是一系列的过滤器链,进行层层拦截,当然我们也可以按照规则自定义过滤器加入链中,如之后的验证码过滤器(要放在UsernamePasswordAuthenticationFilter之前进行),jwt的token验证等。

 

security的认证流程大体是:

https://www.bilibili.com/video/BV1Dt4y1e74H

https://www.bilibili.com/video/BV1ET4y1H7KQ

 

配置类:

 

 我们重点, 1.写配置文件,2.实现接口UserDetailsService 的 loadUserByUsername(username)方法(通过用户名查用户信息和权限列表),返回一个UserDetails 接口的实现类。UserDetails 接口可以自己实现也可以用框架实现好的org.springframework.security.core.userdetails.User

@Service("UserDetailsService")
public class MyUserDetailsService implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        //返回UserDetails接口,我们必须写一个UserDetails的实现类返回,或者用框架已经写好的User类
        //1.从数据库中查询用户名信息及权限 2.封装成UserDetails数据返回

        //1)模拟权限
        List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("admin,manage,ROLE_sale");
        //2)模拟用户信息
        //org.springframework.security.core.userdetails.User;
        User user = new User("用户名",new BCryptPasswordEncoder().encode("密码"),auths);//密码是数据库获取的密码密文

        return user;
    }
}

3. 如果自己实现userDetails接口,重写原有方法外,最好里面加用户实体,user_id,token, password ,设置权限列表等。

获取到UserDetails 后,框架会自行按照过滤器链执行 加密算法比对密码密文.

总结:(我们就实现UserDetailsService接口和UserDetails接口)

 

 ---------------------------------------------------

方法一:如果用原始登录,不改原始login页面, 实现两个接口,1.UserDetailsService  2.UserDetails  .最后配置下,登录成功的着陆页。

(大多数都是默认的类,manager委托provider去验证...)

方法二:如果使用json的jwt方式验证,我们在配置文件中自己生成manager 和 provider去验证。

 上图是,在配置文件中,配置一个authenticationManage的Bean, Spring在启动时会加载,把自定义UserDetailsService和密码验证加入,在验证时使用.

 上图是,我们自己写登录地址是,把用户名和密码封装成UsernamePasswordAuthenticationToken后,使用上面配置的Bean,进行验证,调用的都是我们自定义的UserDetailsService和密码加密算法。

 

配置类:

 

 此外,1.我们还可以定义Handle继承相应接口,完善验证功能。(如认证失败处理类AuthenticationEntryPointImpl,退出处理器LogoutSuccessHandlerImpl)

//认证失败处理器
        //http.exceptionHandling().authenticationEntryPoint(customAuthenticationEntryPoint);

2.我们还可以写过滤器,加载原始的过滤器链的指定位置。(如token认证过滤器JwtAuthenticationTokenFilter,验证码验证逻辑过滤器ValidateCodeFilter)

// 添加JWT filter (验证码过滤器,加载用户密码验证器之前)
        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);

 

// 配置登录之前添加一个验证码的过滤器
        http.addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class);

 

 

 未完.....

 

 

 

 

 

 

 

 

 

 

 

 https://docs.spring.io/spring-security/reference/index.html

 https://blog.csdn.net/2301_78646673/article/details/134801772

https://www.jb51.net/article/281314.htm

 

 https://www.cnblogs.com/fps2tao/p/17409309.html

https://www.cnblogs.com/fps2tao/p/17356448.html

 

https://www.cnblogs.com/fps2tao/p/17393274.html

https://blog.csdn.net/qq_63218110/article/details/136095651

 

标签:UserDetailsService,验证,认证,springboot3,https,过滤器,security,UserDetails
From: https://www.cnblogs.com/fps2tao/p/18222453

相关文章

  • SpringSecurity权限验证
    目录我们先用默认的一个访问拦截页面第二种,我们可以自己写一个登录的页面,也就是没有权限被拦截之后的登录页面我们先用默认的一个访问拦截页面首先先加入我们的Security的一个依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>s......
  • WEB安全:Content Security Policy (CSP) 详解
    ContentSecurityPolicy(CSP)是一种强大的网页安全机制,用于防止跨站脚本(XSS)和其他注入攻击。通过设置一系列的内容安全策略,CSP可以限制网页可以加载的资源,从而保护用户数据和网站的安全性。什么是XSS攻击?跨站脚本攻击(XSS)是一种常见的安全漏洞,攻击者通过注......
  • nginx配置下载站,增加用户认证,增加统计功能
    1.配置文件如下server{listen80;server_namevideo.tom.com;error_log/var/log/nginx/video.tom.cn/err.lognotice;access_log/var/log/nginx/video.tom.cn/access.logmain;root/app/code/video;charsetutf8;#支持中文autoindex......
  • 【网络通信】初探Google的reCAPTCHA安全认证技术
        在数字化日益普及的今天,如何有效保护网站免受恶意攻击和滥用成为了每个网站管理员和开发者必须面对的重要问题。而reCAPTCHA正是Google提供的一种强大且智能的解决方案,旨在通过人机验证来增强网站的安全性。一、reCAPTCHA简介        reCAPTCHA是Google推......
  • springboot3项目的搭建三(统一返回异常等)
    springboot3项目的搭建三(统一返回异常等) 一、统一返回(其实两部分,一个是返回错误码可枚举可类,另一个是返回的实体其中data是泛型)1.返回码:packagecom.qiqi.common.constants;publicenumReturnCode{SUCCESS(200,"操作成功"),NEED_LOGIN(401,"需要登录后操作......
  • 6.基于传统的Cookie和Session实现用户的认证授权
    6.1概述RBAC(Role-BasedAccessControl,基于角色的访问控制)权限按钮控制是一种细粒度的权限管理方式,它允许系统管理员根据用户的角色来精确控制用户界面中功能按钮的可见性和可用性。在RBAC模型中,权限不仅限于访问某个页面或模块,还可以细化到页面上每个操作按钮的权限。......
  • AJ-Report 认证绕过与远程代码执行漏洞(CNVD-2024-15077)
    AJ-Report是全开源的一个BI平台。在其1.4.0版本及以前,存在一处认证绕过漏洞,攻击者利用该漏洞可以绕过权限校验并执行任意代码。补丁对比方法一从docker拖出代码,去gitee下载发行版,便于对比编译后的class。方法二查看git的commit记录,可以直接看到修改了哪些内容!后面要去学习......
  • 【Spring Security】Error:A granted authority textual representation is required
     Security出错了! 分析:Debug跑后 排查是Security中的UserDetails.getAuthorities()在创建SimpleGrantedAuthorityauthority时,所传递的授权信息是空的,导致SimpleGrantedAuthorityauthority出现异常;报出Agrantedauthoritytextualrepresentationisreq......
  • C++语言实现身份证实名认证、身份证上的文字识别接口
    实名认证是什么意思呢?一般指的是对用户资料真实性进行的验证审核,这样有利于建立完善且可靠的互联网环境。如果交易双方使用的都是虚假信息,那么在诸多环节会存在很大的风险。另外,还有游戏平台对玩家进行实名认证,防止未成年人注册。翔云身份证实名认证接口,通过核验身份证二......
  • 虚拟相机一对一聊天平台拍照认证技术永久脚本+【详细教程】
    那么,亲爱的朋友,让我们一起感受这一次的旅程——一次关于虚拟相机、一对一聊天平台的技术故事。这不仅仅是一本教程,更是一本拍照认证技术的启示录,同样也是一段永久脚本的快乐归宿。首先,让我们一起走进虚拟相机的奇幻世界。它不同于传统的硬件设备,而是一种以软件形式存在,能......