SpringBoot整合Light Security框架
官方git地址:https://gitee.com/itmuch/light-security/tree/master
引入maven
- <dependency>
- <groupId>com.itmuch.security</groupId>
- <artifactId>light-security-spring-boot-starter</artifactId>
- <version>1.0.1-RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-aop</artifactId>
- </dependency>
配置文件
- server:
- port: 8009
- light-security:
- # 权限规则配置:表示用{http-method}方法请求的{path}路径必须具备什么{expression}
- spec-list:
- - http-method: ANY
- path: /login
- expression: "anon()"
- - http-method: ANY
- path: /user
- expression: "hasAnyRoles('user','admin')"
- - http-method: ANY
- path: /user-no-access
- expression: "hasAllRoles('user','admin','xx')"
- - http-method: GET
- path: /error
- expression: "anon()"
- - http-method: ANY
- path: /**
- expression: "hasLogin()"
- jwt:
- # jwt sign算法
- algorithm: hs512
- # jwt secret
- secret: {secret}
- # jwt 有效时间
- expiration-in-second: 1209600
代码示例
- @RequestMapping
- @RestController
- @RequiredArgsConstructor(onConstructor = @__(@Autowired))
- public class TestController {
- private final UserOperator userOperator;
- private final JwtOperator operator;
- /**
- * 演示如何获取当前登录用户信息
- * - 该路径需要具备user或admin权限才可访问,详见application.yml
- *
- * @return 用户信息
- */
- @GetMapping("/user")
- public User user() {
- return userOperator.getUser();
- }
- /**
- * 模拟登录,颁发token
- *
- * @return token字符串
- */
- @GetMapping("/login")
- public String loginReturnToken() {
- User user = User.builder()
- .id(1)
- .username("张三")
- .roles(Arrays.asList("user", "admin"))
- .build();
- //也可以以下这种方式
- User user = User.builder()
- .id("用户ID")
- .username("用户名")
- .build();
- return operator.generateToken(user);
- }
- }
然后前端访问的时候要携带请求头
格式为
Authorization:Bearer token
这里的token替换成上面颁发的token 注意Bearer和token之间有个空格
异常捕获处理
- LightSecurityExceptionHandler.java
- package com.ruoyi.exception;
- import com.itmuch.lightsecurity.exception.LightSecurityException;
- import com.vo.R;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.http.HttpStatus;
- import org.springframework.web.bind.MethodArgumentNotValidException;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ResponseBody;
- import org.springframework.web.bind.annotation.ResponseStatus;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * @ClassName 全局异常处理
- * @Author hupeng <610796224@qq.com>
- * @Date 2019/6/27
- **/
- @Slf4j
- @ControllerAdvice
- public class LightSecurityExceptionHandler {
- /**
- * Light Security相关异常
- *
- * @param exception 异常
- * @return 发生异常时的返回
- */
- @ExceptionHandler(value = {LightSecurityException.class})
- @ResponseBody
- public R error(HttpServletRequest request, LightSecurityException exception, HttpServletResponse response) {
- log.error(exception.toString());
- return R.error(4000, exception.getMessage());
- }
- @ExceptionHandler(value = {Exception.class})
- @ResponseStatus(HttpStatus.BAD_REQUEST)
- @ResponseBody
- public R allError(Exception exception) {
- log.error(exception.toString());
- return R.error(4000,exception.getMessage());
- }
- /**
- * 处理所有接口数据验证异常
- * @param e
- * @returns
- */
- @ExceptionHandler(MethodArgumentNotValidException.class)
- @ResponseStatus(HttpStatus.BAD_REQUEST)
- @ResponseBody
- public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
- String[] str = e.getBindingResult().getAllErrors().get(0).getCodes()[1].split("\\.");
- StringBuffer msg = new StringBuffer(str[1]+":");
- msg.append(e.getBindingResult().getAllErrors().get(0).getDefaultMessage());
- return R.error(4001,msg.toString());
- }
- /**
- * 处理自定义异常
- * @param e
- * @return
- */
- @ExceptionHandler(value = BadRequestException.class)
- public R badRequestException(BadRequestException e) {
- return R.error(4002,e.getMessage());
- }
- /**
- * 处理 EntityExist
- * @param e
- * @return
- */
- @ExceptionHandler(value = EntityExistException.class)
- public R entityExistException(EntityExistException e) {
- return R.error(4003,e.getMessage());
- }
- }
SpringBoot整合Light Security框架的更多相关文章
- SpringBoot 整合Spring Security框架
引入maven依赖 <!-- 放入spring security依赖 --> <dependency> <groupId>org.springframework.b ...
- SpringBoot整合Spring Security
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 Spring Securi ...
- springBoot整合spring security实现权限管理(单体应用版)--筑基初期
写在前面 在前面的学习当中,我们对spring security有了一个小小的认识,接下来我们整合目前的主流框架springBoot,实现权限的管理. 在这之前,假定你已经了解了基于资源的权限管理模型 ...
- springBoot整合spring security+JWT实现单点登录与权限管理--筑基中期
写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...
- Springboot整合Shiro安全框架
最近在学习Springboot,在这个过程中遇到了很多之前都没有技术知识,学习了一阵子,稍微总结一些. ---- Shiro框架 shiro框架,是一个相对比较简便的安全框架,它可以干净利落地处理身份 ...
- SpringBoot整合Shiro权限框架实战
什么是ACL和RBAC ACL Access Control list:访问控制列表 优点:简单易用,开发便捷 缺点:用户和权限直接挂钩,导致在授予时的复杂性,比较分散,不便于管理 例子:常见的文件系 ...
- 学习SpringBoot整合SSM三大框架源码之SpringBoot
Spring Boot源码剖析 一.Spring Boot 项目的启动入口流程分析 Spring Boot项目的启动入口main线程上有一个@SpringBootApplication( @Confi ...
- SpringBoot整合Spring Security使用Demo
https://start.spring.io/ 生成SpringBoot项目 pom文件应该是我这样的: <?xml version="1.0" encoding=&quo ...
- SpringBoot整合Logback日志框架配置全解析
目录 本篇要点 一.Logback日志框架介绍 二.SpringBoot与Logback 1.默认日志格式 2.控制台输出 3.文件输出 4.日志级别 5.日志组 6.自定义log配置 三.logba ...
随机推荐
- 【比较基因组】McScan jcvi比较两个基因组共线性细节记录
目录 软件的安装 基因组的准备 一些细节 建议和示例 软件的安装 Python版McScan(jcvi工具包):https://github.com/tanghaibao/jcvi 以前只有pytho ...
- Linux mount挂载磁盘报错 mount: wrong fs type, bad option, bad superblock on /dev/vdb
Linux mount挂载磁盘报错 mount: wrong fs type, bad option, bad superblock on /dev/vdb Linux挂载磁盘报如下错误: moun ...
- [R] venn.diagram保存pdf格式文件?
vennDiagram包中的主函数绘图时,好像不直接支持PDF格式文件: dat = list(a = group_out[[1]][,1],b = group_out[[2]][,1]) names ...
- mysql order by 多个字段排序实现组内排序
总结:大组在前,小组在后,计量值再最后,即可实现组内排序:下边是参考别人的具体实例: 工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问 ...
- mysql-计算排名
mysql计算排名,获取行号rowno 学生成绩表数据 SELECT * FROM table_score ORDER BY score DESC; 获取某个学生成绩排名并计算该学生和上一名学生成绩差 ...
- nordic 51822 sdk. timer 的使用
它的源代码和头文件分别为app_timer.c/app_timer.h.这是Nordic为我们提供的虚拟定时器,这个定时器不同于硬件上的TIMER,而是基于RTC1实现的一种虚拟定时器,其将定时功能作 ...
- Demo01无重复数字
package 习题集2;//有1,2,3,4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?public class Demo1 { public static void main(S ...
- Redis | 第9章 Lua 脚本与排序《Redis设计与实现》
目录 前言 1. Lua 脚本 1.1 Redis 创建并修改 Lua 环境的步骤 1.2 Lua 环境协作组件 1.3 EVAL 命令的实现 1.4 EVALSHA 命令的实现 1.5 脚本管理命令 ...
- 带你全面了解 OAuth2.0
最开始接触 OAuth2.0 的时候,经常将它和 SSO单点登录搞混.后来因为工作需要,在项目中实现了一套SSO,通过对SSO的逐渐了解,也把它和OAuth2.0区分开了.所以当时自己也整理了一篇文章 ...
- [学习总结]8、android 自定义控件 使用declare-styleable进行配置属性(源码角度)
declare-styleable:declare-styleable是给自定义控件添加自定义属性用的. 官方的相关内部控件的配置属性文档:http://developer.android.com/r ...