首页 > 其他分享 >6、集成SpringSecurity安全框架---

6、集成SpringSecurity安全框架---

时间:2024-08-20 17:15:08浏览次数:8  
标签:集成 return springframework SpringSecurity --- org import UserDetails public

不使用自带密码校验,创建 BCryptPasswordEncoder 注入容器,密码加密

1、创建loginUser 类,实行 UserDetails 接口

package com.exam.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class LoginUser implements UserDetails {

    private SysUserinfo sysUserinfo;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }

    @Override
    public String getPassword() {
        return sysUserinfo.getPassword();
    }

    @Override
    public String getUsername() {
        return sysUserinfo.getUsername();
    }

    @Override
    public boolean isAccountNonExpired() {
        return UserDetails.super.isAccountNonExpired();
    }

    @Override
    public boolean isAccountNonLocked() {
        return UserDetails.super.isAccountNonLocked();
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return UserDetails.super.isCredentialsNonExpired();
    }

    @Override
    public boolean isEnabled() {
        return UserDetails.super.isEnabled();
    }
}

2、创建 UserDetailsServiceImpl 类,实行 UserDetailsService 接口

package com.exam.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.exam.entity.LoginUser;
import com.exam.entity.SysUserinfo;
import com.exam.mapper.SysUserinfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

import java.util.Objects;

/**
 * 查询用户信息
 */
@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    SysUserinfoMapper sysUserinfoMapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 查询用户信息
        LambdaQueryWrapper<SysUserinfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysUserinfo::getUsername, username);
        SysUserinfo sysUserinfo = sysUserinfoMapper.selectOne(queryWrapper);
        // 判断不为空
        if (Objects.isNull(sysUserinfo)) {
            throw new RuntimeException("用户名或密码错误");
        }
        //todo 查询用户对应权限信息


        return new LoginUser(sysUserinfo);
    }
}

3、创建 BCryptPasswordEncoder 注入容器,密码加密

package com.exam.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

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

}

4、测试

@Autowired
private PasswordEncoder passwordEncoder;
@Test
public void findname(){
    // 将密码 123 进行加密
    String admin = passwordEncoder.encode("123");
    // 加密后的密码
    System.out.println(admin);
    // 定义前台输入的密码
    String password = "123";
    // 将输入的密码,与加密后的记性比较
    boolean bo = passwordEncoder.matches(password, admin);
    System.out.println(bo);
}

 

标签:集成,return,springframework,SpringSecurity,---,org,import,UserDetails,public
From: https://www.cnblogs.com/wangdch/p/18369873

相关文章

  • Effective-Java-Chapter9-通用程序设计
    https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual/blob/dev/Chapter-9/Chapter-9-Introduction.md准则一将局部变量的作用域最小化不要在变量使用之前就申明,在需要使用的时候进行申明。当然这条准则不是那么绝对,大部分时候遵守就好。......
  • 你是如何克服编程学习中的挫折感的?(-@-^-0-)
            在编程学习中遇到挫折感是极为常见且正常的现象,因为编程往往涉及解决复杂问题、理解抽象概念以及不断试错的过程。        以下是一些建议,帮助你在面对挫折时调整心态,继续前行:接受失败是成长的一部分:首先要认识到,无论是谁,在学习编程的过程中都会遇......
  • uni-app vue3 实现微信朋友圈和朋友分享功能
     1.新建share.jsexportdefault{data(){return{}},//1.配置发送给朋友onShareAppMessage(){return{title:'分享的标题',//分享的标题path:'pages/index',//点击分享链接之后进入的页面路径imageUrl:''//分享发......
  • 找两个单词规律-哈希表
     力扣的简单题目,来找单词的规律,下面我们用python的dict来解决,思路:同时遍历pattern和s,因为s是用空格进行分割的,因此用python的split()函数进行拆分即可。Step1:统计pattern和s的长度是否一致,不一致返回FalseStep2:遍历pattern和sStep3:构建p_dict和s_dict用于编码,......
  • 使用python-slim镜像遇到无法使用PostgreSQL的问题
    前言之前不是把DjangoStarter的docker方案重新搞好了吗一开始demo部署是使用SQLite数据库的,用着没问题,但很快切换到PostgreSQL的时候就遇到问题了…报错docker启动之后,app容器报错django.core.exceptions.ImproperlyConfigured:Errorloadingpsycopg2orpsycopg......
  • AP9195 7-24V高效率、高精度的升压型大功率 LED 照明灯与恒流驱动控制芯片方案
    概述AP9195是一款高效率、高精度的升压型大功率LED灯恒流驱动控制芯片。AP9195内置高精度误差放大器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率、多个高亮度LED灯串的恒流驱动。AP9195通过调节外置的电流采样电阻,能控制高亮度LED灯的驱动电流,使LED灯亮度......
  • Android逆向题解-攻防世界-Ph0en1x-100
    jeb反编译apk主要代码是if那个判断,getFlag取字符串用getSecret加密,和输入字符串encrypt加密后再getSecret加密,进行比较,两边同样都是getSecret加密,那比较可以简化成this.getFlag()==this.encrypt(s)。也就是输入字符经过encrypt加密后等于getFlag的字符串即可。protec......
  • GPT-5 一年半后发布?对此你有何期待?
    GPT-5一年半后发布?对此你有何期待?IT之家6月22日消息,在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉·穆拉蒂被问及GPT-5是否会在明年发布,给出了肯定答案并表示将在一年半后发布。此外,穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的成长。“像GP......
  • mysql - 根据某经纬度 从区域列表内筛选符合条件的区域. 地图经纬度 坐标筛选
    作者原创.转载请注明来源我有一个区域列表.每个区域都有一堆经纬度坐标集合它们组成一个不规则图形.然后我有个经纬度坐标想筛选出这个坐标属于那个区域.mysql适合做这样的筛选吗?//创建区域坐标表CREATETABLEregions( idINTAUTO_INCREMENTPRIMARYKEY,......
  • DC-6
    靶机介绍靶机下载地址:https://download.vulnhub.com/dc/DC-6.zip环境搭建下载之后,解压,使用vmware导入或者virtualbox导入都可以,但注意要保证与你的攻击机在同一网段下,vmware要使用最新版kali攻击机:192.168.98.136靶机渗透信息收集扫描主机arp-scan-l​​......