首页 > 其他分享 >创建UserDetailsService实现类

创建UserDetailsService实现类

时间:2023-08-17 21:45:16浏览次数:52  
标签:UserDetailsService return 实现 创建 user Override import security public

package com.security.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.security.domain.LoginUser;
import com.security.domain.User;
import com.security.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
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.Component;
import java.util.Objects;

@Component
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {

        //查询用户信息
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getUserName,userName);
        User user = userMapper.selectOne(queryWrapper);
        //没有查询到用户抛出异常
        if(Objects.isNull(user)){
            //异常会被ExceptionTranslationFilter捕获到
           throw new RuntimeException("用户名或者密码错误");
        }

        //todo 查询对应的权限信息

        //把数据封装成UserDetails返回
        return new LoginUser(user);
    }
}

访问接口时需要登录:http://localhost:8080/login

 

登录成功后,接口正常返回

 

因为UserDetailsService方法的返回值是UserDetails类型,所以需要定义一个类,实现该接口,把用户信息封装在其中。

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

    private User user;


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

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

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

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}

 

标签:UserDetailsService,return,实现,创建,user,Override,import,security,public
From: https://www.cnblogs.com/ixtao/p/17638929.html

相关文章

  • 在 Spring Boot 中通过定时任务实现本地 Redis 数据同步到阿里云 Redis
    添加依赖在项目的pom.xml文件中,添加SpringBootStarter和Redis相关的依赖。<!--SpringBootStarter--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>......
  • Dev C++实现三子棋
    1.新建项目三子棋2.新建game.c,game.h文件3.main.c代码测试三子棋 #include<stdio.h>#include<stdlib.h>#include"game.h"voidmenu(){ printf("***************\n"); printf("*1.play0.exit*\n"); printf("***************\n&qu......
  • 高可扩展性架构设计:实现水平扩展和负载均衡的策略
    在当今互联网应用程序的发展中,高可扩展性架构设计变得越来越重要。随着用户量和数据量的增加,传统的单服务器架构已经无法满足高并发和大规模的需求。为了应对这些挑战,我们需要设计一种高可扩展性架构,能够实现水平扩展和负载均衡的策略。什么是水平扩展和负载均衡水平扩展是指通......
  • 容器编排平台的自动伸缩与负载均衡:使用自动伸缩组和负载均衡器实现弹性扩展和负载均衡
    本文将介绍如何使用自动伸缩组和负载均衡器在容器编排平台上实现弹性扩展和负载均衡。我们将探讨自动伸缩组和负载均衡器的概念,并详细介绍它们在容器编排平台中的应用。此外,我们还将提供相关代码示例,以帮助读者更好地理解和实践这些概念。引言随着容器技术的发展,容器编排平台成......
  • 实现两栏布局的第二种方式
     目录前言导语 代码部分运行结果前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语实现两栏布......
  • 实现两栏布局的第三种方式
     目录前言导语 代码部分运行结果前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语实现两栏布......
  • Spartacus 添加 PWA 应用到 home 的实现原理分析
    代码位置:https://github.com/SAP/spartacus/blob/develop-6.4.x/projects/storefrontlib/cms-structure/pwa/services/add-to-home-screen.service.ts这段Angular代码是一个用于添加到主屏幕(AddtoHomeScreen)功能的服务,它是为Spartacus项目中的PWA模块设计的。PWA代表Progressi......
  • WPF --- 非Button自定义控件实现点击功能
    引言今天在做一个设置文件夹路径的功能,就是一个文本框,加个按钮,点击按钮,弹出FolderBrowserDialog再选择文件夹路径,简单做法,可以直接StackPanel横向放置一个TextBox和一个ImageButton,然后点击按钮在后台代码中给ViewModel的FilePath赋值。但是这样属实不够优雅,UI不够......
  • 如何在已创建的 es 索引中增加分片
    在Elasticsearch中,分片的数量在创建索引时就已经设置好了,所以在已经创建的索引中增加分片是不可能的。这是因为Elasticsearch在创建索引时,会根据分片的数量把数据分布到不同的节点上,如果在创建索引后改变分片的数量,那么数据的分布就会出问题,这是Elasticsearch设计上的一个决......
  • 基于FPGA实现的图像加密与解密
    双非硕士研一下学期视觉转FPGA长路漫漫,但希望前途光明基于图像加密的方法网上有特别多种由于我自己本身也是初学者,所以就复现了最简单最直接的加密和解密的方法也就是明文和密钥的异或操作 显示的图片如下:原图/解密 加密图片思路:1)定义两个ROM,分别存储明文数据和密钥数据,明文数据......