Spring Boot的安全配置(三) 每日讯息
JWT
JWT(JSON Web Token)是一种用于在网络中传输安全信息的开放标准(RFC 7519)。它可以在各个服务之间安全地传递用户认证信息,因为它使用数字签名来验证信息的真实性和完整性。
JWT有三个部分,每个部分用点(.)分隔:
Header:通常包含JWT使用的签名算法和令牌类型。Payload:包含有关用户或其他主题的声明信息。声明是有关实体(通常是用户)和其他数据的JSON对象。声明被编码为JSON,然后使用Base64 URL编码。Signature:用于验证消息是否未被篡改并且来自预期的发送者。签名由使用Header中指定的算法和秘钥对Header和Payload进行加密产生。在Spring Boot中,您可以使用Spring Security和jjwt库来实现JWT的认证和授权。下面是一个使用JWT的示例:
(相关资料图)
@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Value("${jwt.secret}") private String jwtSecret; @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers(HttpMethod.POST, "/api/authenticate").permitAll() .anyRequest().authenticated() .and() .addFilter(new JwtAuthenticationFilter(authenticationManager(), jwtSecret)) .addFilter(new JwtAuthorizationFilter(authenticationManager(), jwtSecret)) .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); } @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(new JwtAuthenticationProvider(jwtSecret)); }}
在上面的示例中,SecurityConfig
类继承了WebSecurityConfigurerAdapter
并使用了@EnableWebSecurity
注解启用Spring Security。configure()
方法使用HttpSecurity
对象来配置HTTP请求的安全性。.csrf().disable()
禁用了CSRF保护。.authorizeRequests()
表示进行授权请求。.antMatchers(HttpMethod.POST, "/api/authenticate").permitAll()
表示允许POST请求到/api/authenticate
路径。.anyRequest().authenticated()
表示要求所有其他请求都需要身份验证。.addFilter(new JwtAuthenticationFilter(authenticationManager(), jwtSecret))
和.addFilter(new JwtAuthorizationFilter(authenticationManager(), jwtSecret))
分别添加JWT认证和授权过滤器。.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
指定了会话管理策略。
configure()
方法中还有一个configure(AuthenticationManagerBuilder auth)
方法,它使用JwtAuthenticationProvider
类配置身份验证。在这里,jwtSecret
被注入到JwtAuthenticationProvider
构造函数中,以便在认证过程中使用。
下面是JwtAuthenticationFilter
和JwtAuthorizationFilter
的实现:
public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager; private final String jwtSecret; public JwtAuthenticationFilter(AuthenticationManager authenticationManager, String jwtSecret) { this.authenticationManager = authenticationManager; this.jwtSecret = jwtSecret; setFilterProcessesUrl("/api/authenticate"); } @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) { try { LoginRequest loginRequest = new ObjectMapper().readValue(request.getInputStream(), LoginRequest.class); Authentication authentication = new UsernamePasswordAuthenticationToken( loginRequest.getUsername(), loginRequest.getPassword() ); return authenticationManager.authenticate(authentication); } catch (IOException e) { throw new RuntimeException(e); } } @Override protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) { UserPrincipal userPrincipal = (UserPrincipal) authResult.getPrincipal(); String token = Jwts.builder() .setSubject(userPrincipal.getUsername()) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + 864000000)) .signWith(SignatureAlgorithm.HS512, jwtSecret) .compact(); response.addHeader("Authorization", "Bearer " + token); }}
JwtAuthenticationFilter
类继承了UsernamePasswordAuthenticationFilter
类,它用于处理基于用户名和密码的身份验证。它还使用AuthenticationManager
来验证用户名和密码是否正确。jwtSecret
在构造函数中被注入,用于生成JWT令牌。
在attemptAuthentication()
方法中,LoginRequest
对象被反序列化为从请求中获取的用户名和密码。这些值被封装到UsernamePasswordAuthenticationToken
中,并传递给AuthenticationManager
以验证用户身份。
在身份验证成功后,successfulAuthentication()
方法被调用。在这里,UserPrincipal
对象被从Authentication
对象中获取,然后使用Jwts
类生成JWT令牌。setSubject()
方法将用户名设置为JWT主题。setIssuedAt()
方法设置JWT令牌的发行时间。setExpiration()
方法设置JWT令牌的到期时间。signWith()
方法使用HS512算法和jwtSecret
密钥对JWT令牌进行签名。最后,JWT令牌被添加到响应标头中。
下面是JwtAuthorizationFilter
的实现:
public class JwtAuthorizationFilter extends BasicAuthenticationFilter { private final String jwtSecret; public JwtAuthorizationFilter(AuthenticationManager authenticationManager, String jwtSecret) { super(authenticationManager); this.jwtSecret = jwtSecret; } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { String authorizationHeader = request.getHeader("Authorization"); if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) { chain.doFilter(request, response); return; } String token = authorizationHeader.replace("Bearer ", ""); try { Jws claimsJws = Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token); String username = claimsJws.getBody().getSubject(); List authorities = (List) claimsJws.getBody().get("authorities"); List grantedAuthorities = authorities.stream() .map(SimpleGrantedAuthority::new) .collect(Collectors.toList()); Authentication authentication = new UsernamePasswordAuthenticationToken(username, null, grantedAuthorities); SecurityContextHolder.getContext().setAuthentication(authentication); chain.doFilter(request, response); } catch (JwtException e) { response.setStatus(HttpStatus.UNAUTHORIZED.value()); } }}
JwtAuthorizationFilter
类继承了BasicAuthenticationFilter
类,并覆盖了doFilterInternal()
方法。在这个方法中,请求头中的Authorization
标头被解析,如果它不是以Bearer
开头,则直接传递给过滤器链。否则,从令牌中解析出主题(用户名)和授权信息,然后创建一个包含用户身份验证和授权信息的Authentication
对象,并将其设置到SecurityContextHolder
中。
如果JWT令牌无效,JwtException
将被抛出,并返回HTTP 401未经授权的错误。
标签:
相关阅读
-
Spring Boot的安全配置(三) 每日讯息
JWT(JSONWebToken)是一种用于在网络中传输安全信息的开放标准(RF... -
一个鸡爪插14根签子?商家回应说了什么...
一个鸡爪插14根签子?商家回应说了什么?近日,在四川成都,顾客吐槽... -
澳大利亚有哪些城市?澳大利亚有哪些著...
澳大利亚有哪些城市?澳大利亚分为6个州和两个地区。1、6个州分别是... -
成都先导:计算科学与人工智能暂未为公...
此前成都先导肝内靶向的GalNAc在分子水平和细胞水平已经验证过,目... -
极端暴风雪席卷加拿大:2人死亡 超100...
加拿大暴风雪席卷后的街道海外网4月7日电据路透社4月6日报道,一场... -
木薯粉是什么东西?木薯粉的功效与作用...
木薯粉是什么东西?木薯粉是一种从大槭科植物的块根中提取的淀粉,这...
精彩放送
-
北汽制造总裁魏勇:魏桥国科助推北汽制造...
新起点,新征程!近期,在魏桥国科智行(山东)装备科技有限公司(以下简... -
七匹狼男装打造品质夹克,满足消费者更...
作为重要的民生产业,中国服装业在产业结构、质量效益、国内外市场... -
Spring Boot的安全配置(三) 每日讯息
JWT(JSONWebToken)是一种用于在网络中传输安全信息的开放标准(RF... -
梨花头是烫出来的吗?烫了内扣梨花头洗...
梨花头是烫出来的吗?梨花头造型简单,方便打理,因为这个特点比较符... -
热点在线丨专家称金价创新高只是时间问...
讯——在如此多的不�定性主导金融市场的情况下大多数分析师预计金... -
一个鸡爪插14根签子?商家回应说了什么...
一个鸡爪插14根签子?商家回应说了什么?近日,在四川成都,顾客吐槽... -
澳大利亚有哪些城市?澳大利亚有哪些著...
澳大利亚有哪些城市?澳大利亚分为6个州和两个地区。1、6个州分别是... -
每日简讯:上海浦东小学排名是怎样的?...
1、义务教育阶段在小学至初中是根据户籍直升到对口初中的(民办除外... -
今日快看!6月份节日有哪些?6月份节日大...
1、国家规定的休息日今年六月有5个星期6,4个星期天另外还有一个端... -
尊师爱校的手抄报怎么做?关于尊师爱校...
1、“学为人师,行为世范”是北京师范大学的校训,这两句话不仅在北师... -
【天天热闻】南京计算机考研学校排名是...
1、计算机考研最好的学校排名计算机系统结构前20名(总共47所高校)... -
beneficial是什么意思?beneficial怎么造句?
1、beneficial是有益的,有好处的。2、这种词组用法不能死记硬背,... -
海贼王主要人物有哪些?海贼王主要人物...
1、路飞海贼团船长:路飞能力:橡胶果实梦想:成为海贼王悬赏金:3亿$剑... -
天天最新:白加黑感冒药怎么服用?白加...
1、白加黑感冒药用法用量:日用片:口服成人和12岁以上儿童一次1~2... -
东洋兵是什么字谜底是什么?失其心也打...
东洋兵是什么字谜底是什么?东洋兵就是日军,所以,东洋兵打一字应是... -
断货王UBIO优碧欧超级复合辅酶Q10 为何...
近日,小编留意到欧洲崇尚自然的知名科学营养保健品牌UBIO优碧欧,... -
文化程度怎么填写?国家文化程度代码标...
1、文化程度要填写的内容是指所获得的学历(即要获得国家承认的相关... -
七律长征的基本资料有哪些?七律长征怎...
1、 "长征 "是这首诗的题目。2、一九三四年十月间,中央红军主力... -
北京爱情故事好看吗?北京爱情故事片尾...
北京爱情故事好看吗?好看。有一种成长叫程峰,有一种友谊叫吴狄,有... -
盆景艺术五大流派分别是什么?五大流派...
1、我国盆景流派众多,有传统的五大派别:扬派、岭南派、川派、苏派... -
家庭边缘计算趋势已到,中创新数字科技...
随着当前5G和物联网不断发展,智能终端设备不断普及,边缘侧数据呈现... -
【世界热闻】银保监会提醒防范“养老”骗局
针对以上诈骗“套路”,中国银保监会消费者权益保护局提示老年消费... -
时政画说丨有朋自远方来 世界百事通
(点击观看视频)时隔3年多,法国总统马克龙再次对中国进行国事访问... -
成都先导:计算科学与人工智能暂未为公...
此前成都先导肝内靶向的GalNAc在分子水平和细胞水平已经验证过,目... -
聚焦:专家称金价创新高只是时间问题,...
讯——在如此多的不�定性主导金融市场的情况下大多数分析师预计金... -
天天热资讯!最新!四川成都、内江、遂...
人民网成都4月7日电(袁菡苓)日前,四川成都、内江、遂宁发布最新人... -
王导:本周从1950一路干多黄金至2030 快看
本周黄金的主基调就是多我也是从1950一线连续做多黄金至2030期间没... -
走过一甲子,援非医疗队架起中非友谊桥...
参考消息网4月6日报道1963年4月6日,中国向发展中国家派出的第一支... -
极端暴风雪席卷加拿大:2人死亡 超100...
加拿大暴风雪席卷后的街道海外网4月7日电据路透社4月6日报道,一场... -
聚酯纤维衣服烘干褶皱怎么去除? 世界观天下
聚酯纤维衣服烘干褶皱可以喷一些水悬挂除皱,还可以滚烫除皱。聚酯... -
开局之春话经济 “开年之季”数据背后...
2023年第一季度已经结束,作为“开年之季”,第一季度我国的经济发... -
苏泊尔2022年度净利同比增6.36% 拟10派30.3元
苏泊尔披露年报。公司2022年实现营业收入20,170,527,516 66元,同... -
找到了!全城寻找的3名少年,是他们!|视讯
4月4日几名见义勇为的少年在哈尔滨市的防洪纪念塔江边救人的视频引... -
木薯粉是什么东西?木薯粉的功效与作用...
木薯粉是什么东西?木薯粉是一种从大槭科植物的块根中提取的淀粉,这... -
马桶堵了如何自己快速疏通?直冲式马桶...
马桶堵了如何自己快速疏通?1、打开马桶的水龙头,将洗衣服的水桶充... -
哪里有卖茶杯犬?茶杯犬寿命一般是多长...
哪里有卖茶杯犬?如果想要去买茶杯犬,那么可以去网上购买,不过需要... -
“天坑专业”→“香饽饽”!这些专业人...
每年的四月是校园春招的高峰期,以往,“生化环材”因为就业环境不... -
怎么看朋友圈访客记录?朋友圈怎么设置...
怎么看朋友圈访客记录?1、点击下方我打开进入微信主页面,点击页面... -
抖音怎么知道谁看过我?抖音被限制了什...
抖音怎么知道谁看过我?1、打开抖音消息,点击互动消息。2、在消息界... -
天天时讯:新华时评:推动优质医疗资源...
新华社北京4月7日电题:推动优质医疗资源扩容下沉,让人人享有健康... -
铁骨铮铮 赤胆忠魂——致敬缅怀公安英烈
新华社北京4月6日电题:铁骨铮铮赤胆忠魂——致敬缅怀公安英烈新华... -
淘宝账号名字怎么改?淘宝店铺改名字会...
淘宝账号名字怎么改?淘宝账号名不能修改。淘宝账号名是淘宝网唯一身... -
天天热讯:商务部美大司负责人就澳大利亚...
央视网消息:商务部网站4月7日消息,商务部美大司负责人就澳大利亚... -
中山五一去哪里旅游比较好?-每日简讯
中山五一去哪里旅游比较好?自然景观景点01、五桂山田心森林公园田心... -
qq怎么看单向好友?单向好友是指他删除...
qq怎么看单向好友?1、点击头像在手机qq界面点击头像2、点击设置在个... -
手机文件加密如何操作?手机文件误删除...
手机文件加密如何操作?手机文件夹不支持加密码,但可以将文件夹中的... -
滴滴打车怎么付钱?滴滴打车到目的地后...
滴滴打车怎么付钱?1、打开滴滴出行,点击右上角的个人中心。2、点击... -
抖音一起看怎么弄?苹果开启了画中画但...
抖音一起看怎么弄?1、抖音点击视频右下角的转发图标。2、在底部出现... -
引入专业力量,辅助生态司法修复
走进福建省漳州市东山县樟塘镇南埔村一个废弃加工场,沿着排水管道... -
全球观点:守好养老钱!银保监会提示:...
央广网北京4月6日消息据银保监会网站消息,近期,一些不法分子利用... -
又是一年春好处 “花果经济”催热乡村旅游
央视网消息:现在正是春暖花开的好时节,接下来我们跟随镜头,一起... -
【天天快播报】热评两岸丨走进这片“熟...
“印象最深刻的是搭高铁,看到大陆城市的经济发展、社会发展蛮超乎... -
好政策助经济企稳回升 独家焦点
全国规模以上工业增加值同比增长2 4%,社会消费品零售总额同比增长... -
什么是雀斑?女性脸上长雀斑原因有哪些...
什么是雀斑?雀斑(freckles),是一种皮肤疾病的名称,系指发于颜面等... -
艾紫馨:耶稣受难日外盘休市 沪金...
前言生活简单迷人人生简单幸福把简单的东西复杂化太累把复杂的东西... -
临危不乱见义勇为 “90后”小伙闯入...
位于石湖荡镇古松路123号一居民家中近日发生火灾,小区保安见义勇为... -
焦点速看:中信证券:国内光模块龙头将...
智通财经APP获悉,中信证券发布研究报告称,AI大模型的训练和应用,... -
2023上海全球投资促进大会举行,重大项...
2023年4月6日,2023上海全球投资促进大会举行,上海临港作为投资热土... -
美国就业市场的拐点真的来了?且非农如...
在周五4月7日的非农就业报告出炉之前我们看到一些谨慎的交易周四的... -
为市场创造真价值,九号机器人亮相青岛...
4月6日到9日,2023青岛数字文化应用产品交易大会于青岛举办。作为全... -
观察:头狼:黄金本周多空统统收割,多...
本周值得总结一下尤其是周一我们博文提到1950反手干多也是公开进场... -
天津市武清区:发挥区位优势 打造智...
天津市武清区似乎不是一个发展大体量商圈的最佳地区:地处天津远郊... -
每日观点:更好发挥税收职能作用(权威...
4月6日上午,国新办举行第十二场“权威部门话开局”系列主题新闻发... -
这个春天,跟他们一样感受云南!-全球资讯
新华社昆明4月6日电近日,抚仙湖畔、花海之中,一场新颖别致的新闻... -
金市展望:非农恐再引爆一波大涨!下周C...
在如此多的不�定性主宰着金融市场的情况下大多数分析人士预计金价... -
走进企业看信心|粤港澳大湾区最快地铁...
在广州,有条最高时速可以达到160公里、而且全线地下运行的线路,那... -
“六个逐步向好” 一个“W”型曲线——...
原标题:权威部门话开局|“六个逐步向好”一个“W”型曲线——从税... -
齐鲁银行董事长郑祖刚任职资格获核准
21世纪经济报道实习生仝若楠,记者杨希北京报道4月5日盘后,齐鲁银... -
天津适合摄影的景点有哪些?美丽天津摄...
学搭配,每个爱美的人都必不可少的课程。紧跟潮流时尚动态,教你如... -
全球滚动:史上最好听的轻音乐排名是怎样...
1、世界著名钢琴曲全部介绍给你。2、希望楼主满意,谢谢采纳!《梦... -
微动态丨郑屠为什么会被打死?郑屠的性...
1、郑屠是一个剥削者、压迫者的形象。2、他原本是个屠户,但由于他... -
盛大旗下有哪些游戏?盛大网络游戏列表...
1、包括正在运营来或是将要运营自的有:热血传奇┊传奇世界┊彩虹岛... -
快资讯丨蓝色经济是什么概念?黑色经济...
1、蓝色经济,又称海洋经济。2、现代蓝色经济包括为开发海洋资源和... -
魔兽世界人物信息怎么查询?魔兽世界人...
1、有2种解决方法。2、1:如果你的WOW是在家玩的,而且家里的电脑没... -
【全球报资讯】礼物买多少钱合适
礼物买多少钱合适,礼物多的,送朋友礼物可是一种很多选择,但是一... -
迈克尔杰克逊为啥皮肤变白?迈克尔杰克...
1、迈克尔杰克逊是患白癜风,很多年的病情导致了他皮肤变白。2、迈... -
湘妃指的是谁?湘妃历史资料介绍?_当前...
1、汉刘向《烈女传·有虞二妃》云:“有虞二妃,帝尧二女也,长娥皇... -
CDR怎样设置快捷键?cdr常用快捷键有哪...
1、CDR设置快捷键方法:一、按CTRL+J—工作区—自定义—命令—点击... -
绿博园门票价格是多少?绿博园门票优惠...
1、门票价格:每人次门票价格为30元;郑州市民可凭第二代身份证购买... -
高丽参有什么功效?高丽参的副作用有哪...
1、人丹帝品网高丽参具有:1 益智健脑对记忆力减退和运动协调能力... -
(交易者说)如何抓住“真突破”?90%的...
导读突破是动能爆发最明显的标志,是确定趋势最有效的方法之一,是... -
PVC 底部形态渐显
随着宏观预期交易的逐步落地,PVC市场未来主要关注西北产区检修幅度... -
技术解盘 股指 20230407 全球热头条
IF重启上涨IF加权近期向上突破今年2月份以来的下降通道,重启上涨趋... -
分析人士:橡胶缺乏上涨驱动力
近期,沪胶主力合约换月至9月后,期价回吐前期反弹,在跌破12000元... -
王导:黄金2010多单获利,2000附近做多
晚间空单提前出场金子跌不动了平仓休息早上黄金全网公开2010做多获... -
每日热议!比尔·盖茨看好 王传福质疑自...
【比尔·盖茨看好王传福质疑自动驾驶!】关于自动驾驶的前景近期引... -
电视剧《乡村爱情14》赵群扮演者是谁?...
电视剧《乡村爱情14》赵群扮演者是谁?在电视剧《乡村爱情14》中,赵... -
韦小宝是哪一个朝代的?韦小宝有历史原...
韦小宝是哪一个朝代的?在电视剧《鹿鼎记》中,韦小宝是清朝人。韦小... -
信阳市水利局:科学应对强降雨过程 全...
河南广电·大象新闻记者吴彦飞通讯员袁志磊近日,信阳市迎来一轮强... -
【权威部门话开局】多项税收数据反映经...
央视网消息(新闻联播):在国新办今天(4月6日)举行的“权威部门... -
每日热议!为图放心而找的汽车陪驾,真的...
阅读提示“本本族”技能遗忘、刚出驾校不敢开车、车况路况不熟练…... -
首例医美领域消费公益诉讼剑指假冒美容...
近日,江苏省消保委联合南京铁路运输检察院、南京市公安局江宁分局... -
传统演艺点亮园林“夜游”
这是4月5日拍摄的苏州网师园夜景。新华社记者李博摄4月5日,演员在... -
赵四唱惊雷是哪集?赵四跳舞触电是哪一集?
赵四唱惊雷是哪集?赵四唱惊雷是在《乡村爱情14》里的第三集。新年伊... -
倚天屠龙记之圣火雄风丁敏君扮演者叫什...
倚天屠龙记之圣火雄风丁敏君扮演者叫什么?丁敏君是电影《倚天屠龙记... -
香港故宫文化博物馆展出第四批故宫博物...
新华社香港4月6日电香港故宫文化博物馆6日宣布,向故宫博物院借展的... -
Kitco调查:黄金是时候歇息了?如突破这...
24K99讯对黄金来说这是意义重大的一周缩短的一周交易结束时金价维持... -
当前热门:中国驻美使馆发言人就蔡英文...
新华社华盛顿4月5日电中国驻美国使馆发言人5日就蔡英文“过境”窜美... -
中国农科院发表最新科研成果 棉纤维品...
新华社北京4月6日电记者近日从中国农业科学院棉花研究所获悉,该所... -
价格战殃及保值率 3月二手车预计成交145万辆
价格战殃及保值率3月二手车预计成交145万辆3月车市价格战“轰轰烈烈...