oauth2 token为空拦截_SpringBoot 整合 oauth2(三)实现 token 认证

本文详细介绍了如何在SpringBoot应用中整合OAuth2,实现Token认证。通过密码授权模式,阐述了从获取clientId和clientSecret,到登录认证、创建OAuth2AccessToken的过程,并配置了认证和资源服务器。
摘要由CSDN通过智能技术生成

关于session和token的使用,网上争议一直很大。

总的来说争议在这里:

session是空间换时间,而token是时间换空间。session占用空间,但是可以管理过期时间,token管理部了过期时间,但是不占用空间.

sessionId失效问题和token内包含。

session基于cookie,app请求并没有cookie 。

token更加安全(每次请求都需要带上)。

开始正文了...

本文大概流程:

oauth2流程简介

我在这里只介绍常用的密码授权。

Oauth2 密码授权流程

在oauth2协议里,每一个应用都有自己的一个clientId和clientSecret(需要去认证方申请),所以一旦想通过认证,必须要有认证方下发的clientId和secret。

原理这块确实很麻烦,希望不理解的多看看参考文档。

1. pom

org.springframework.boot

spring-boot-starter-security

org.springframework.security.oauth

spring-security-oauth2

2. 项目架构介绍

我们需要这七个类来完成。

3. UserDetail实现认证第一步

MyUserDetailsService.java

/**

* Created by Fant.J.

*/

@Component

public class MyUserDetailsService implements UserDetailsService {

@Reference(version = "2.0.0")

private UserService userService;

@Override

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

String passwd = "";

System.out.println("收到的账号"+username);

if (CheckFormat.isEmail(username)){

passwd = userService.selectPasswdByEmail(username);

}else if (CheckFormat.isPhone(username)){

passwd = userService.selectPasswdByPhone(username);

}else {

throw new RuntimeException("登录账号不存在");

}

System.out.println("查到的密码"+passwd);

return new User(username, passwd, AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER"));

}

}

这里重写了security认证UserDetailsService 的接口方法,添加了自定义数据库密码的查询和校验。

为什么我把它放在了controller包了呢,因为我用的dubbo,@Reference注解扫描包是controller。这注解在别的包下失效。没搞过dubbo的朋友就把它当作是调用service层就行。

4. 认证成功/失败处理器

这部分在security的整合(一)就有,这里稍有改动。

改动一:去掉了返回view还是json的判断,统一返回json。

改动二:修改登

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值