没有合适的资源?快使用搜索试试~ 我知道了~
首页基于SpringBoot整合oauth2实现token认证
基于SpringBoot整合oauth2实现token认证
1星 50 下载量 160 浏览量
更新于2023-03-03
评论
收藏 106KB PDF 举报
主要介绍了基于SpringBoot整合oauth2实现token 认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
资源详情
资源评论
资源推荐
基于基于SpringBoot整合整合oauth2实现实现token认证认证
主要介绍了基于SpringBoot整合oauth2实现token 认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考
下
这篇文章主要介绍了基于SpringBoot整合oauth2实现token 认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
session和和token的区别:的区别:
session是空间换时间,而token是时间换空间。session占用空间,但是可以管理过期时间,token管理部了过期时间,但是不占用空间.
sessionId失效问题和token内包含。
session基于cookie,app请求并没有cookie 。
token更加安全(每次请求都需要带上)
Oauth2 密码授权流程密码授权流程
在oauth2协议里,每一个应用都有自己的一个clientId和clientSecret(需要去认证方申请),所以一旦想通过认证,必须要有认证方下发的clientId和secret。
1. pom
<!--security-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>
2. UserDetail实现认证第一步
MyUserDetailsService.java
@Autowired
private PasswordEncoder passwordEncoder;
/**
* 根据进行登录
* @param username
* @return
* @throws UsernameNotFoundException
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
log.info("登录用户名:"+username);
String password = passwordEncoder.encode("123456");
//User三个参数 (用户名+密码+权限)
//根据查找到的用户信息判断用户是否被冻结
log.info("数据库密码:"+password);
return new User(username,password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
}
3. 获取token的控制器
@RestController
public class OauthController {
@Autowired
private ClientDetailsService clientDetailsService;
@Autowired
private AuthorizationServerTokenServices authorizationServerTokenServices;
@Autowired
private AuthenticationManager authenticationManager;
@PostMapping("/oauth/getToken")
public Object getToken(@RequestParam String username, @RequestParam String password, HttpServletRequest request) throws IOException {
Map<String,Object>map = new HashMap<>(8);
//进行验证
String header = request.getHeader("Authorization");
if (header == null && !header.startsWith("Basic")) {
map.put("code",500);
map.put("message","请求投中无client信息");
return map;
}
String[] tokens = this.extractAndDecodeHeader(header, request);
assert tokens.length == 2;
//获取clientId 和 clientSecret
String clientId = tokens[0];
String clientSecret = tokens[1];
//获取 ClientDetails
ClientDetails clientDetails = clientDetailsService.loadClientByClientId(clientId);
if (clientDetails == null){
map.put("code",500);
map.put("message","clientId 不存在"+clientId);
return map;
//判断 方言 是否一致
}else if (!StringUtils.equals(clientDetails.getClientSecret(),clientSecret)){
map.put("code",500);
map.put("message","clientSecret 不匹配"+clientId);
return map;
}
//使用username、密码进行登录
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(username, password);
//调用指定的UserDetailsService,进行用户名密码验证
weixin_38698863
- 粉丝: 1
- 资源: 921
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1