官方git地址:https://gitee.com/itmuch/light-security/tree/master

引入maven

  1. <dependency>
  2. <groupId>com.itmuch.security</groupId>
  3. <artifactId>light-security-spring-boot-starter</artifactId>
  4. <version>1.0.1-RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-aop</artifactId>
  9. </dependency>

配置文件

  1. server:
  2. port: 8009
  3. light-security:
  4. # 权限规则配置:表示用{http-method}方法请求的{path}路径必须具备什么{expression}
  5. spec-list:
  6. - http-method: ANY
  7. path: /login
  8. expression: "anon()"
  9. - http-method: ANY
  10. path: /user
  11. expression: "hasAnyRoles('user','admin')"
  12. - http-method: ANY
  13. path: /user-no-access
  14. expression: "hasAllRoles('user','admin','xx')"
  15. - http-method: GET
  16. path: /error
  17. expression: "anon()"
  18. - http-method: ANY
  19. path: /**
  20. expression: "hasLogin()"
  21. jwt:
  22. # jwt sign算法
  23. algorithm: hs512
  24. # jwt secret
  25. secret: {secret}
  26. # jwt 有效时间
  27. expiration-in-second: 1209600

代码示例

  1. @RequestMapping
  2. @RestController
  3. @RequiredArgsConstructor(onConstructor = @__(@Autowired))
  4. public class TestController {
  5. private final UserOperator userOperator;
  6. private final JwtOperator operator;
  7.  
  8. /**
  9. * 演示如何获取当前登录用户信息
  10. * - 该路径需要具备user或admin权限才可访问,详见application.yml
  11. *
  12. * @return 用户信息
  13. */
  14. @GetMapping("/user")
  15. public User user() {
  16. return userOperator.getUser();
  17. }
  18.  
  19. /**
  20. * 模拟登录,颁发token
  21. *
  22. * @return token字符串
  23. */
  24. @GetMapping("/login")
  25. public String loginReturnToken() {
  26. User user = User.builder()
  27. .id(1)
  28. .username("张三")
  29. .roles(Arrays.asList("user", "admin"))
  30. .build();
  31.  
  32. //也可以以下这种方式
  33. User user = User.builder()
  34. .id("用户ID")
  35. .username("用户名")
  36. .build();
  37.  
  38. return operator.generateToken(user);
  39. }
  40. }

然后前端访问的时候要携带请求头

格式为

Authorization:Bearer token

这里的token替换成上面颁发的token 注意Bearer和token之间有个空格

异常捕获处理

  1. LightSecurityExceptionHandler.java
  1. package com.ruoyi.exception;
  2.  
  3. import com.itmuch.lightsecurity.exception.LightSecurityException;
  4. import com.vo.R;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.http.HttpStatus;
  7. import org.springframework.web.bind.MethodArgumentNotValidException;
  8. import org.springframework.web.bind.annotation.ControllerAdvice;
  9. import org.springframework.web.bind.annotation.ExceptionHandler;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. import org.springframework.web.bind.annotation.ResponseStatus;
  12.  
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15.  
  16. /**
  17. * @ClassName 全局异常处理
  18. * @Author hupeng <610796224@qq.com>
  19. * @Date 2019/6/27
  20. **/
  21. @Slf4j
  22. @ControllerAdvice
  23. public class LightSecurityExceptionHandler {
  24.  
  25. /**
  26. * Light Security相关异常
  27. *
  28. * @param exception 异常
  29. * @return 发生异常时的返回
  30. */
  31. @ExceptionHandler(value = {LightSecurityException.class})
  32. @ResponseBody
  33. public R error(HttpServletRequest request, LightSecurityException exception, HttpServletResponse response) {
  34. log.error(exception.toString());
  35. return R.error(4000, exception.getMessage());
  36.  
  37. }
  38.  
  39. @ExceptionHandler(value = {Exception.class})
  40. @ResponseStatus(HttpStatus.BAD_REQUEST)
  41. @ResponseBody
  42. public R allError(Exception exception) {
  43. log.error(exception.toString());
  44. return R.error(4000,exception.getMessage());
  45. }
  46.  
  47. /**
  48. * 处理所有接口数据验证异常
  49. * @param e
  50. * @returns
  51. */
  52. @ExceptionHandler(MethodArgumentNotValidException.class)
  53. @ResponseStatus(HttpStatus.BAD_REQUEST)
  54. @ResponseBody
  55. public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
  56. String[] str = e.getBindingResult().getAllErrors().get(0).getCodes()[1].split("\\.");
  57. StringBuffer msg = new StringBuffer(str[1]+":");
  58. msg.append(e.getBindingResult().getAllErrors().get(0).getDefaultMessage());
  59. return R.error(4001,msg.toString());
  60. }
  61.  
  62. /**
  63. * 处理自定义异常
  64. * @param e
  65. * @return
  66. */
  67. @ExceptionHandler(value = BadRequestException.class)
  68. public R badRequestException(BadRequestException e) {
  69. return R.error(4002,e.getMessage());
  70. }
  71.  
  72. /**
  73. * 处理 EntityExist
  74. * @param e
  75. * @return
  76. */
  77. @ExceptionHandler(value = EntityExistException.class)
  78. public R entityExistException(EntityExistException e) {
  79. return R.error(4003,e.getMessage());
  80. }
  81. }
  1. R.java 参考:https://www.cnblogs.com/pxblog/p/13792038.html

SpringBoot整合Light Security框架的更多相关文章

  1. SpringBoot 整合Spring Security框架

    引入maven依赖 <!-- 放入spring security依赖 --> <dependency> <groupId>org.springframework.b ...

  2. SpringBoot整合Spring Security

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 Spring Securi ...

  3. springBoot整合spring security实现权限管理(单体应用版)--筑基初期

    写在前面 在前面的学习当中,我们对spring security有了一个小小的认识,接下来我们整合目前的主流框架springBoot,实现权限的管理. 在这之前,假定你已经了解了基于资源的权限管理模型 ...

  4. springBoot整合spring security+JWT实现单点登录与权限管理--筑基中期

    写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...

  5. Springboot整合Shiro安全框架

    最近在学习Springboot,在这个过程中遇到了很多之前都没有技术知识,学习了一阵子,稍微总结一些. ---- Shiro框架 shiro框架,是一个相对比较简便的安全框架,它可以干净利落地处理身份 ...

  6. SpringBoot整合Shiro权限框架实战

    什么是ACL和RBAC ACL Access Control list:访问控制列表 优点:简单易用,开发便捷 缺点:用户和权限直接挂钩,导致在授予时的复杂性,比较分散,不便于管理 例子:常见的文件系 ...

  7. 学习SpringBoot整合SSM三大框架源码之SpringBoot

    Spring Boot源码剖析 一.Spring Boot 项目的启动入口流程分析 Spring Boot项目的启动入口main线程上有一个@SpringBootApplication( @Confi ...

  8. SpringBoot整合Spring Security使用Demo

    https://start.spring.io/ 生成SpringBoot项目 pom文件应该是我这样的: <?xml version="1.0" encoding=&quo ...

  9. SpringBoot整合Logback日志框架配置全解析

    目录 本篇要点 一.Logback日志框架介绍 二.SpringBoot与Logback 1.默认日志格式 2.控制台输出 3.文件输出 4.日志级别 5.日志组 6.自定义log配置 三.logba ...

随机推荐

  1. 【比较基因组】McScan jcvi比较两个基因组共线性细节记录

    目录 软件的安装 基因组的准备 一些细节 建议和示例 软件的安装 Python版McScan(jcvi工具包):https://github.com/tanghaibao/jcvi 以前只有pytho ...

  2. 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 ...

  3. [R] venn.diagram保存pdf格式文件?

    vennDiagram包中的主函数绘图时,好像不直接支持PDF格式文件: dat = list(a = group_out[[1]][,1],b = group_out[[2]][,1]) names ...

  4. mysql order by 多个字段排序实现组内排序

    总结:大组在前,小组在后,计量值再最后,即可实现组内排序:下边是参考别人的具体实例: 工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问 ...

  5. mysql-计算排名

    mysql计算排名,获取行号rowno 学生成绩表数据 SELECT * FROM table_score ORDER BY score DESC; 获取某个学生成绩排名并计算该学生和上一名学生成绩差 ...

  6. nordic 51822 sdk. timer 的使用

    它的源代码和头文件分别为app_timer.c/app_timer.h.这是Nordic为我们提供的虚拟定时器,这个定时器不同于硬件上的TIMER,而是基于RTC1实现的一种虚拟定时器,其将定时功能作 ...

  7. Demo01无重复数字

    package 习题集2;//有1,2,3,4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?public class Demo1 { public static void main(S ...

  8. Redis | 第9章 Lua 脚本与排序《Redis设计与实现》

    目录 前言 1. Lua 脚本 1.1 Redis 创建并修改 Lua 环境的步骤 1.2 Lua 环境协作组件 1.3 EVAL 命令的实现 1.4 EVALSHA 命令的实现 1.5 脚本管理命令 ...

  9. 带你全面了解 OAuth2.0

    最开始接触 OAuth2.0 的时候,经常将它和 SSO单点登录搞混.后来因为工作需要,在项目中实现了一套SSO,通过对SSO的逐渐了解,也把它和OAuth2.0区分开了.所以当时自己也整理了一篇文章 ...

  10. [学习总结]8、android 自定义控件 使用declare-styleable进行配置属性(源码角度)

    declare-styleable:declare-styleable是给自定义控件添加自定义属性用的. 官方的相关内部控件的配置属性文档:http://developer.android.com/r ...