首页 > 其他分享 >登录接口实现细节分析与登录接口代码实现

登录接口实现细节分析与登录接口代码实现

时间:2023-04-25 10:57:55浏览次数:31  
标签:登录 qinghuatokendemo 实现 springframework 接口 org import security com

登录接口实现细节分析

 登陆接口   

  接下我们需要自定义登陆接口,然后让SpringSecurity对这个接口放行,让用户访问这个接口的时候不用登录也能访问。

  ​在接口中我们通过AuthenticationManager的authenticate方法来进行用户认证,所以需要在SecurityConfig中配置把AuthenticationManager注入容器。

​  认证成功的话要生成一个jwt,放入响应中返回。并且为了让用户下回请求时能通过jwt识别出具体的是哪个用户,我们需要把用户信息存入redis,可以把用户id作为key。

登录接口代码实现

    

package com.example.qinghuatokendemo.Controller;

import com.example.qinghuatokendemo.Domain.ResponseResult;
import com.example.qinghuatokendemo.Domain.User;
import com.example.qinghuatokendemo.Service.LoginServcie;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class LoginController {


    @Autowired
    private LoginServcie loginServcie;

    @PostMapping("/user/login")
    public ResponseResult login(@RequestBody User user){
        //登录
        return loginServcie.login(user);
    }

}

  

 

package com.example.qinghuatokendemo.Config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

      //创建BCryptPasswordEncoder注入容器
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                //关闭csrf
                .csrf().disable()
                //不通过Session获取SecurityContext
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                // 对于登录接口 允许匿名访问
                .antMatchers("/user/login").anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated();
    }

}

 

package com.example.qinghuatokendemo.Service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.qinghuatokendemo.Domain.LoginUser;
import com.example.qinghuatokendemo.Domain.User;
import com.example.qinghuatokendemo.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.Service;

import java.util.Objects;

@Service
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)){
            throw new RuntimeException("用户名或者密码错误");
        }
        //查询对应的权限信息


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

 

  

标签:登录,qinghuatokendemo,实现,springframework,接口,org,import,security,com
From: https://www.cnblogs.com/x3449/p/17351961.html

相关文章

  • github~通过packages功能实现maven仓库托管
    github在被大微软收购之后,推出了很多非常不错的功能,这一次把很多仓库管理合并到一起了,包括了nuget,npm,maven,docker等等,今天我们把java代码推到github的maven仓库吧!申请一个githubtoken建立一个仓库,起名为maven_repo配置你的.m2/settings.xml文件<settingsxmlns="http://......
  • SpringBoot接口支持配置https步骤
    本地利用JDK工具生成证书1.keytool-genkey-keyalgRSA-keystoretomcat.jks2.keytool-importkeystore-srckeystoretomcat.jks-destkeystoretomcat.pkcs12-deststoretypepkcs12 验证是否成功keytool-list-vkeystoretomcat.jks keytool-list-vkeystoretom......
  • Go 使用 MongoDB 实现分页查询
    解决过程CSDN中搜到一个有Bug的代码import( "context" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options")funcFind(database*mongo.Databas......
  • AntDesign中a-pagination实现一次性获取所有数据下手动分页
    业务效果核心代码<template><a-paginationv-model:current="current":total="total":pageSize="pageSize"show-less-itemsshow-size-change......
  • 淘宝API接口对接(商品详情,评论,按图搜图,订单列表)代码封装,可高并发
    淘宝OpenAPI(Openapplicationprogramminginterface)是一套REST方式的开放应用程序编程接口。淘宝网根据自己提供的电子商务基础服务,抽象并做成一系列的API接口。通过这些接口,可以让外部用户能够通过程序的方式访问淘宝网的数据和平台。淘宝OpenAPI是淘宝开放平台的重要组成......
  • 拒绝“千人一面”!使用CDP实现市场细分助力GMV增长
    哈佛商学院在美国进行的一项调查发现,95%的新品牌失败是由于无效的营销细分,其失败的原因在于每个消费者都是独立的个体,他们也有着独特的要求。因此,千人一面的营销策略无法吸引所有用户。而成功品牌总是会向正确的消费者提供正确的产品,为此,营销人员需要彻底了解他们的客户,市场细分可......
  • vim中实现全文查找替换确认操作
    我们很多时候会需要某个字符串在文章中某些位置出现时被替换,而其它位置不被替换的有选择的操作,这就需要用户来进行确认::%s/aaa/bbb/g#替换当前文本所有行的aaa为bbb#在命令后面加上一个字母c就可以实现,即::%s/aaa/bbb/gc#顾名思意,c是confirm的缩写  效果: ......
  • uniapp 打包aab上传到google play的时候google 登录报异常
    因为App上传到GooglePlay后,会被重新签名(PlayAppSigning)谷歌为你生成的签名SHA-1将谷歌为你生成的签名SHA-1证书指纹复制到本应用已创建的凭据SHA-1处,点击保存后,ClientID并没有变,所以不用重新打包。现在,不用等,你可以试试Google+登录了。Google+登录ok。参考地址:https......
  • 反射实现Hello World(注解的使用)
    注解中的元数据包括Target,Rentention,Inherited,Documented。注解:publicinterfaceAnnotationThecommoninterfaceextendedbyallannotationtypes.Notethataninterfacethatmanuallyextendsthisonedoesnotdefineanannotationtype.Alsonotethatthisinterf......
  • P.4-前后端分类登录校验、P.6-SpringSecurity完整流程
    P.4-前后端分类登录校验P.6-SpringSecurity完整流程SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。(了解即可)UsernamePasswordAuthenticationFilter:负责处理我们在登陆页面填写了用户名密码后的登陆请求。入门案例的认证工作主要......