认证流程源码杂记

认证流程源码

认证处理流程说明
认证结果如何在多个请求之间共享
获取认证用户信息
在这里插入图片描述

首选是UsernamePasswordAuthenticationFilter 
获取到请求中携带的用户名和密码,然后构建一个UsernamePasswordAuthenticationToken 对象
public class UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
    if (this.postOnly && !request.getMethod().equals("POST")) {
        throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
    } else {
        String username = this.obtainUsername(request);
        String password = this.obtainPassword(request);
        if (username == null) {
            username = "";
        }

        if (password == null) {
            password = "";
        }

        username = username.trim();
        UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
        this.setDetails(request, authRequest);
        return this.getAuthenticationManager().authenticate(authRequest);
    }
}
}




public class UsernamePasswordAuthenticationToken extends AbstractAuthenticationToken


public interface AuthenticationManager {
    Authentication authenticate(Authentication var1) throws AuthenticationException;
}


public class ProviderManager implements AuthenticationManager, MessageSourceAware, InitializingBean

在这里插入图片描述

DaoAuthenticationProvider

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

AbstractAuthenticationProcessingFilter
在这里插入图片描述

SecurityContextImpl

在这里插入图片描述

在这里插入图片描述

拿到用户登录信息

@RequestMapping("user")
//每个方法的路径前面都有一个user 可以抽取出来放到类上 ,spring 会将类上的路径+方法上的路径 作为访问路径
@RestController
public class UserController implements Serializable {


    @GetMapping("/me")
    public Object getCurrentUser(){
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        return  authentication;
    }

    @GetMapping("/me1")
    public Object getCurrentUser1(Authentication authentication ){
        //spring 会自动找到Authentication类型的数据注入
        return  authentication;
    }

    @GetMapping("/me2")
    public Object getCurrentUser2(@AuthenticationPrincipal UserDetails user){
        return user;
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值