最新要闻
- 世界即时:宿州:全市采血点无休 库存现缺A型、o型血
- 传统车企掀桌子!20.89万起的别克E5太香了:累计订单已超8000份 每日焦点
- 小鹏P7停车礼让 随后看呆:老奶奶5秒跑过斑马线还竖大拇指-世界微速讯
- 手机创史上最大降幅 回收成香饽饽:“暴利”超乎想象 焦点消息
- 天天微头条丨年轻人的首台超联接笔记本 华为MateBook D 14开卖 首销购机享福利
- 五一小长假来了!滴滴宣布发2亿司机补贴:假期出车流水加速
- dota如何踢人?dota怎么设置快捷键?
- 今日视点:4月26日浙江蓝苏氟化工氢氟酸价格暂稳
- 半成品加工是什么意思?半成品加工需要办什么证件?
- nba fmvp是什么意思?fmvp是怎么评出来的?
- 50米自由泳世界纪录是多少?50米自由泳一二三级运动员标准
- 全球即时:据说,有一群AI数字人将在AWE展会觉醒......
- 增城是哪里的城市?增城旅游必去十大景点
- 守住“头顶上的安全”, 长征镇加强房屋高坠隐患排查整治|当前时讯
- 微信支付支持数字人民币支付了:视频号、小程序可用
- 【世界新视野】丰田社长体验中国顶级豪车红旗L5:满脸堆笑、不住称赞
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【环球速看料】从数据库查询权限信息与自定义失败处理
从数据库查询权限信息
代码实现
我们只需要根据用户id去查询到其所对应的权限信息即可。
【资料图】
所以我们可以先定义个mapper,其中提供一个方法可以根据userid查询权限信息。
package com.example.qinghuatokendemo.Mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.example.qinghuatokendemo.Domain.Menu;import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapperpublic interface MenuMapper extends BaseMapper
尤其是自定义方法,所以需要创建对应的mapper文件,定义对应的sql语句
在application.yml中配置mapperXML文件的位置
spring: datasource: url: jdbc:mysql://localhost:3306/springsecurity?characterEncoding=utf-8&serverTimezone=UTC username: root password: njzyb555 driver-class-name: com.mysql.cj.jdbc.Drivermybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml
测试类
package com.example.qinghuatokendemo;import com.example.qinghuatokendemo.Domain.User;import com.example.qinghuatokendemo.Mapper.MenuMapper;import com.example.qinghuatokendemo.Mapper.UserMapper;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;import org.springframework.security.crypto.password.PasswordEncoder;import java.util.List;@SpringBootTestpublic class MapperTest { @Autowired private UserMapper userMapper; @Autowired private MenuMapper menuMapper; @Autowired private PasswordEncoder passwordEncoder; @Test public void TestBCryptPasswordEncoder(){ //$2a$10$9CmQULPcw8prFL.gnmM/zO1bDtPtVNb4mTxNs2wHsm7xonGMCvT2C System.out.println(passwordEncoder. matches("1234", "$2a$10$eAQvguaa3mHMt7cUrXeQnu3vIw74tbNtthm/t1gH6IMrRihv1OpRu")); /*String encode = passwordEncoder.encode("1234"); System.out.println(encode);*/ } @Test public void testUser(){ Listusers = userMapper.selectList(null); System.out.println(users); } @Test public void testselectPermsByUserId(){ List list = menuMapper.selectPermsByUserId(1L); System.out.println(list); }}
自定义失败处理
我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json,这样可以让前端能对响应进行统一的处理。要实现这个功能我们需要知道SpringSecurity的异常处理机制。
在SpringSecurity中,如果我们在认证或者授权的过程中出现了异常会被ExceptionTranslationFilter捕获到。在ExceptionTranslationFilter中会去判断是认证失败还是授权失败出现的异常。
如果是认证过程中出现的异常会被封装成AuthenticationException然后调用AuthenticationEntryPoint对象的方法去进行异常处理。
如果是授权过程中出现的异常会被封装成AccessDeniedException然后调用AccessDeniedHandler对象的方法去进行异常处理。
所以如果我们需要自定义异常处理,我们只需要自定义AuthenticationEntryPoint和AccessDeniedHandler然后配置给SpringSecurity即可。
自定义实现类
package com.example.qinghuatokendemo.Handler;import com.alibaba.fastjson.JSON;import com.example.qinghuatokendemo.Domain.ResponseResult;import com.example.qinghuatokendemo.Utils.WebUtils;import org.springframework.http.HttpStatus;import org.springframework.security.core.AuthenticationException;import org.springframework.security.web.AuthenticationEntryPoint;import org.springframework.stereotype.Component;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@Componentpublic class AccessDeniedHandlerImpl implements AuthenticationEntryPoint { @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { ResponseResult result = new ResponseResult(HttpStatus.INTERNAL_SERVER_ERROR.value(),"用户认证失败请查询登录"); String json = JSON.toJSONString(request); //处理异常 WebUtils.renderString(response,json); }}
package com.example.qinghuatokendemo.Handler;import com.alibaba.fastjson.JSON;import com.example.qinghuatokendemo.Domain.ResponseResult;import com.example.qinghuatokendemo.Utils.WebUtils;import org.springframework.http.HttpStatus;import org.springframework.security.access.AccessDeniedException;import org.springframework.security.web.access.AccessDeniedHandler;import org.springframework.stereotype.Component;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@Componentpublic class AccessDeniedHandlerImpl implements AccessDeniedHandler { @Override public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { ResponseResult result = new ResponseResult(HttpStatus.FORBIDDEN.value(), "权限不足"); String json = JSON.toJSONString(result); WebUtils.renderString(response,json); }}
package com.example.qinghuatokendemo.Config;import com.example.qinghuatokendemo.Handler.AccessDeniedHandlerImpl;import com.example.qinghuatokendemo.filter.JwtAuthenticationTokenFilter;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.authentication.AuthenticationManager;import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import org.springframework.security.config.http.SessionCreationPolicy;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;import org.springframework.security.crypto.password.PasswordEncoder;import org.springframework.security.web.AuthenticationEntryPoint;import org.springframework.security.web.access.AccessDeniedHandler;import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;@Configuration@EnableGlobalMethodSecurity(prePostEnabled = true)public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } @Autowired JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter; @Autowired private AuthenticationEntryPoint authenticationEntryPoint; @Autowired private AccessDeniedHandler accessDeniedHandler; @Override protected void configure(HttpSecurity http) throws Exception { /* http //关闭csrf .csrf().disable() //不通过Session获取SecurityContext .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() // 对于登录接口 允许匿名访问 .antMatchers("/user/login").anonymous() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated();*/ http .csrf().disable() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .antMatchers("/hello").permitAll() .antMatchers("/user/login").anonymous() .anyRequest().authenticated(); //把token校验过滤器添加到过滤器链中 http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); //配置异常处理器 http.exceptionHandling() //认证失败处理器 .authenticationEntryPoint(authenticationEntryPoint).accessDeniedHandler(accessDeniedHandler); } @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); }}
关键词:
-
每日观点:【Excel统计分析插件】上海道宁为您提供统计分析、数据可视化和建模软件——Analyse-it
Analyse-it与许多Excel加载项开发人员不同,使用完善的软件开发和QA实践,包括单元 集成 系统测试、敏捷开
来源: 【环球速看料】从数据库查询权限信息与自定义失败处理
每日观点:【Excel统计分析插件】上海道宁为您提供统计分析、数据可视化和建模软件——Analyse-it
亿级日活业务稳如磐石,华为云CodeArts PerfTest发布
深入思考右值引用
看点:Java中抽象类和接口的区别?
世界即时:宿州:全市采血点无休 库存现缺A型、o型血
传统车企掀桌子!20.89万起的别克E5太香了:累计订单已超8000份 每日焦点
小鹏P7停车礼让 随后看呆:老奶奶5秒跑过斑马线还竖大拇指-世界微速讯
手机创史上最大降幅 回收成香饽饽:“暴利”超乎想象 焦点消息
天天微头条丨年轻人的首台超联接笔记本 华为MateBook D 14开卖 首销购机享福利
五一小长假来了!滴滴宣布发2亿司机补贴:假期出车流水加速
dota如何踢人?dota怎么设置快捷键?
今日视点:4月26日浙江蓝苏氟化工氢氟酸价格暂稳
半成品加工是什么意思?半成品加工需要办什么证件?
nba fmvp是什么意思?fmvp是怎么评出来的?
50米自由泳世界纪录是多少?50米自由泳一二三级运动员标准
诺基亚5320当年多少钱?诺基亚5320手机参数
苹果一体机怎么开机?苹果一体机电脑型号大全列表
诺基亚820怎么连接电脑?诺基亚820手机参数
当前观点:使用pycuda替换字符串,使用cuda替换字符串
python 使用selenium 不开启浏览器
今日热议:C# 获取系统DPI缩放比例以及分辨率大小
TF-GNN踩坑记录(四) 全球报道
CentOS搭建squid正向代理|当前热门
全球即时:据说,有一群AI数字人将在AWE展会觉醒......
增城是哪里的城市?增城旅游必去十大景点
联通iphone合约机划算吗?联通iphone语音信箱怎么关闭?
电信网络模式有哪几种?电信网络模式怎么设置?
【金融街发布】财政部:3月全国发行地方政府债券8900亿元
守住“头顶上的安全”, 长征镇加强房屋高坠隐患排查整治|当前时讯
微信支付支持数字人民币支付了:视频号、小程序可用
【世界新视野】丰田社长体验中国顶级豪车红旗L5:满脸堆笑、不住称赞
99年女子疑过度劳累宿舍猝死 公司:逝者是临时工
280g新疆长绒棉:Caria Knar纯棉T恤29.99元(减110元)
【全球新视野】NVIDIA推出安全“护栏”:限制人工智能“一本正经的胡扯”
22家上市后备企业蓄势待发!永兴经开区优化营商环境促发展-新视野
Java基础之String字符串的底层原理,面试常见问题
当前速读:error: Your local changes to the following files would be overwritten by me
Java8 教程_编程入门自学教程_菜鸟教程-免费教程分享
天天观焦点:兰州高新区重点项目建设实现一季度开门红
中金湖北科投光谷REIT正式获批 全球信息
全球视讯!华为MateBook D14/D16今日开售:13代酷睿 4999元起
有人姓“苟”:担心孩子受嘲笑而改姓_环球新视野
天天日报丨五一假期用得着!冈本okamoto超薄安全套大促:立省60元
全球观热点:国产鼠标卷疯了 200元碾压千元国际大牌
黄海附近发生4.8级地震:上海等地有震感 焦点播报
天天热门:洞口县:刘玮到江口镇调研督导工作,与结对帮带年轻干部谈心谈话
记一次某应用虚拟化系统远程代码执行
【当前独家】JavaScript设计模式
每日速读!Pipelines
Spring Boot 项目代码混淆,实战来了,再也不用担心代码泄露了!
重庆警方破获特大制售假冒汽车安全气囊案 涉案金额逾2亿元|天天热文
世界即时:*ST蓝盾股债或被双双强退 蓝盾转债或成第一只退市可转债
【财经分析】山东高速、湖北科投两单REITs获批 常态化发行进入快车道
中大盘蓝筹股成调研重点 热点企业AI业务受机构关注
全球速讯:天涯社区已无法打开:网友掀悼念潮
《原神》开发商最新力作!米哈游《崩坏:星穹铁道》今日公测 每日报道
天天精选!卫星通信首次下放!华为nova 11系列首销:2499元起
网传眉山夜市有人偷小孩?警方:男子并非人贩,疑用假币引纠纷 正进一步调查
速看:百亿级新投资项目此起彼伏 光伏头部企业加速“垂直一体化”布局
【国际大宗商品早报】经济衰退担忧回升 原油基本金属全线下跌
长三角楼市:3月量价齐升
1台利润是安卓机10倍!iPhone翻新机全球卖爆:系统不卡 保值好|环球快播报
天天观热点:比OLED更香!苹果即将商用MicroLED技术:不烧屏
学系统集成项目管理工程师(中项)系列12_干系人管理-焦点消息
十四届全国人大常委会举行第三次委员长会议,赵乐际主持-环球观天下
千元以下投影仪最好别买!原因揭开 世界看热讯
fastbin_tcache 环球热闻
【天天新视野】说好一个价,上门又加价——透析搬家等服务收费乱象
64核心!京东发布首款ARM云主机:性能飙升60% 还便宜50%-每日热文
曝光徐州旅游踩坑网红账号被举报:账号私信已被封
领先苹果7年!华为将推出无创血糖监测智能手表:识别率超85%|天天热闻
全球焦点!6月上映!《变形金刚7:超能勇士崛起》新海报发布:汽车人集结
【环球新要闻】当事人回应吐槽软卧3男1女被狂批:很不高兴 理性一些吧
【环球新要闻】国际锐评丨“先开枪,再开口”美国陷入了怎样的怪圈?
打印机测试页打印不出来(打印机测试页) 当前时讯
环球时讯:C语言程序设计知识点总结02
clion使用 wsl 编译下, 文件名和目录名冲突问题|全球即时
铁矿石主力合约跌破700关口_天天微速讯
被千万粉网红曝光 徐州通报出租车违规营运处理情况:司机罚款1000元
特斯拉再获中东大户订单:以后出租车全是Model 3/Y?_全球即时
对话黑芝麻智能CEO:芯片公司 错两次可能就死了 环球时快讯
世界看点:为了地球 希捷一年翻新116万块硬盘:减少540吨垃圾
世界视讯!图论之存图
07.存储引擎
中诚信国际:终止启迪环境科技发展公司主体及相关债项信用等级
足球6步过人方法 环球今日报
当前头条:关于时间管理的一点建议
热消息:07 内存(中)实现内存页面初始化
【新华解读】两个新准则实施有望进一步推动保险公司高质量发展_天天资讯
2023中国医学装备展览会在重庆开幕-焦点日报
环球动态:玩家称赞《死亡岛2》画面优秀:那《GTA6》会是啥样?
暗黑4容量要求翻倍:至少90GB SSD 比魔兽18年积累还多
北大学生因差评被逼写检讨?电影《惊天救援》辟谣:不实传闻|当前热议
【世界热闻】龙源电力(00916)公布一季度业绩 归属公司权益持有人净利润为24.18亿元 同比增长7.09%
Django之路由层 (有名和无名分组 反向解析 路由分发 名称空间)_环球观速讯
资讯:分析查询语句:EXPLAIN
上海数据交易所迎来国际板
天天播报:注意!泰福泵业将于5月23日召开股东大会
人与动物和谐共处!大爷水中游泳:天降白鹭搭便车