开箱即用,看看人家的微服务权限解决方案,那叫一个优雅(1)

com.macro.cloud

micro-sa-token-common

1.0.0

  • 接下来修改配置文件application.yml,添加Redis配置和Sa-Token的配置,如果你看过之前那篇Sa-Token使用教程的话,基本就知道这些配置的作用了;

spring:

redis:

database: 0

port: 6379

host: localhost

password:

Sa-Token配置

sa-token:

token名称 (同时也是cookie名称)

token-name: Authorization

token有效期,单位秒,-1代表永不过期

timeout: 2592000

token临时有效期 (指定时间内无操作就视为token过期),单位秒

activity-timeout: -1

是否允许同一账号并发登录 (为false时新登录挤掉旧登录)

is-concurrent: true

在多人登录同一账号时,是否共用一个token (为false时每次登录新建一个token)

is-share: false

token风格

token-style: uuid

是否输出操作日志

is-log: false

是否从cookie中读取token

is-read-cookie: false

是否从head中读取token

is-read-head: true

  • 添加Sa-Token的配置类SaTokenConfig,注入一个过滤器用于登录认证和权限认证,在setAuth方法中添加路由规则,在setError方法中添加鉴权失败的回调处理;

@Configuration

public class SaTokenConfig {

/**

  • 注册Sa-Token全局过滤器

*/

@Bean

public SaReactorFilter getSaReactorFilter() {

return new SaReactorFilter()

// 拦截地址

.addInclude(“/**”)

// 开放地址

.addExclude(“/favicon.ico”)

// 鉴权方法:每次访问进入

.setAuth(r -> {

// 登录认证:除登录接口都需要认证

SaRouter.match(“/**”, “/auth/user/login”, StpUtil::checkLogin);

// 权限认证:不同接口访问权限不同

SaRouter.match(“/api/test/hello”, () -> StpUtil.checkPermission(“api:test:hello”));

SaRouter.match(“/api/user/info”, () -> StpUtil.checkPermission(“api:user:info”));

})

// setAuth方法异常处理

.setError(e -> {

// 设置错误返回格式为JSON

ServerWebExchange exchange = SaReactorSyncHolder.getContent();

exchange.getResponse().getHeaders().set(“Content-Type”, “application/json; charset=utf-8”);

return SaResult.error(e.getMessage());

});

}

}

  • 扩展下Sa-Token提供的StpInterface接口,用于获取用户的权限,我们在用户登录以后会把用户信息存到Session中去,权限信息也会在里面,所以权限码只要从Session中获取即可。

/**

  • 自定义权限验证接口扩展

*/

@Component

public class StpInterfaceImpl implements StpInterface {

@Override

public List getPermissionList(Object loginId, String loginType) {

// 返回此 loginId 拥有的权限码列表

UserDTO userDTO = (UserDTO) StpUtil.getSession().get(“userInfo”);

return userDTO.getPermissionList();

}

@Override

public List getRoleList(Object loginId, String loginType) {

// 返回此 loginId 拥有的角色码列表

return null;

}

}

micro-sa-token-auth

===================

接下来我们来搭建下认证服务,只要集成Sa-Token并实现登录接口即可,非常简单。

  • 首先在pom.xml中添加相关依赖,包括Sa-Token的SpringBoot依赖、整合Redis实现分布式Session的依赖以及我们的micro-sa-token-common依赖;

cn.dev33

sa-token-spring-boot-starter

1.24.0

cn.dev33

sa-token-dao-redis-jackson

1.24.0

org.apache.commons

commons-pool2

com.macro.cloud

micro-sa-token-common

1.0.0

  • 接下来修改配置文件application.yml,照抄之前网关的配置即可;

spring:

redis:

database: 0

port: 6379

host: localhost

password:

Sa-Token配置

sa-token:

token名称 (同时也是cookie名称)

token-name: Authorization

token有效期,单位秒,-1代表永不过期

timeout: 2592000

token临时有效期 (指定时间内无操作就视为token过期),单位秒

activity-timeout: -1

是否允许同一账号并发登录 (为false时新登录挤掉旧登录)

is-concurrent: true

在多人登录同一账号时,是否共用一个token (为false时每次登录新建一个token)

is-share: false

token风格

token-style: uuid

是否输出操作日志

is-log: false

是否从cookie中读取token

is-read-cookie: false

是否从head中读取token

is-read-head: true

  • 在UserController中定义好登录接口,登录成功后返回Token,具体实现在UserServiceImpl类中;

/**

  • 自定义Oauth2获取令牌接口

  • Created by macro on 2020/7/17.

*/

@RestController

@RequestMapping(“/user”)

public class UserController {

@Autowired

private UserServiceImpl userService;

@RequestMapping(value = “/login”, method = RequestMethod.POST)

public CommonResult login(@RequestParam String username, @RequestParam String password) {

SaTokenInfo saTokenInfo = userService.login(username, password);

if (saTokenInfo == null) {

return CommonResult.validateFailed(“用户名或密码错误”);

}

Map<String, String> tokenMap = new HashMap<>();

tokenMap.put(“token”, saTokenInfo.getTokenValue());

tokenMap.put(“tokenHead”, saTokenInfo.getTokenName());

return CommonResult.success(tokenMap);

}

}

  • 在UserServiceImpl中添加登录的具体逻辑,首先验证密码,密码校验成功后,通知下Sa-Token登录的用户ID,然后把用户信息直接存储到Session中去;

/**

  • 用户管理业务类

  • Created by macro on 2020/6/19.

*/

@Service

public class UserServiceImpl{

private List userList;

public SaTokenInfo login(String username, String password) {

SaTokenInfo saTokenInfo = null;

UserDTO userDTO = loadUserByUsername(username);

if (userDTO == null) {

return null;

}

if (!SaSecureUtil.md5(password).equals(userDTO.getPassword())) {

return null;

}

// 密码校验成功后登录,一行代码实现登录

StpUtil.login(userDTO.getId());

// 将用户信息存储到Session中

StpUtil.getSession().set(“userInfo”,userDTO);

// 获取当前登录用户Token信息

saTokenInfo = StpUtil.getTokenInfo();

return saTokenInfo;

}

}

  • 这里有一点需要提醒下,Sa-Token的Session并不是我们平时理解的HttpSession,而是它自己实现的类似Session的机制。

micro-sa-token-api

==================

接下来我们来搭建一个受保护的API服务,实现获取登录用户信息的接口和需要特殊权限才能访问的测试接口。

  • 首先在pom.xml中添加相关依赖,和上面的micro-sa-token-auth一样;

cn.dev33

sa-token-spring-boot-starter

1.24.0

cn.dev33

sa-token-dao-redis-jackson

1.24.0

org.apache.commons

commons-pool2

com.macro.cloud

micro-sa-token-common

1.0.0

  • 接下来修改配置文件application.yml,照抄之前网关的配置即可;

spring:

redis:

database: 0

port: 6379

host: localhost

password:

Sa-Token配置

sa-token:

token名称 (同时也是cookie名称)

token-name: Authorization

token有效期,单位秒,-1代表永不过期

timeout: 2592000

token临时有效期 (指定时间内无操作就视为token过期),单位秒

activity-timeout: -1

是否允许同一账号并发登录 (为false时新登录挤掉旧登录)

is-concurrent: true

在多人登录同一账号时,是否共用一个token (为false时每次登录新建一个token)

is-share: false

token风格

token-style: uuid

是否输出操作日志

is-log: false

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

知其然不知其所以然,大厂常问面试技术如何复习?

1、热门面试题及答案大全

面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer

2、多线程、高并发、缓存入门到实战项目pdf书籍

3、文中提到面试题答案整理

4、Java核心知识面试宝典

覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
66)]

[外链图片转存中…(img-qyIbu9lS-1713673068367)]

[外链图片转存中…(img-agvyUQRa-1713673068367)]

3、文中提到面试题答案整理

[外链图片转存中…(img-AOOtgAEg-1713673068367)]

4、Java核心知识面试宝典

覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入

[外链图片转存中…(img-YC66EqcH-1713673068367)]

[外链图片转存中…(img-lFsbuTr4-1713673068368)]

[外链图片转存中…(img-mgY8vOew-1713673068368)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值