系列四、Spring Security认证 授权(前后端不分离)

一、Spring Security认证 & 授权(前后端不分离)

1.1、MyWebSecurityConfigurerAdapter

/*** @Author : 一叶浮萍归大海* @Date: 2024/1/11 21:50* @Description:*/
@Configuration
public class MyWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {/*** 密码加密器* @return*/@BeanPasswordEncoder passwordEncoder() {return NoOpPasswordEncoder.getInstance();}/*** 配置基于内存的用户* @param auth* @throws Exception*/@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("admin").password("123456").roles("admin").and().withUser("root").password("123456").roles("root");}/*** 静态资源过滤* @param web* @throws Exception*/@Overridepublic void configure(WebSecurity web) throws Exception {web.ignoring().antMatchers("/js/**", "/css/**","/images/**");}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/helloWorld").permitAll().anyRequest().authenticated().and().formLogin()/*** 自定义登录页面,覆盖Spring Security默认的登录页* 仅仅配置loginPage("/login.html")其实对应两个请求,即:*      GET:http://localhost:7001/login.html,用来获取登录页面*      POST:http://localhost:7001/login.html,处理登录请求* 也可以将登录页面和处理登录请求分开配置,如下:*/.loginPage("/login.html").loginProcessingUrl("/login")/*** 登录成功回调:*      defaultSuccessUrl("/login/successGET")*      successForwardUrl("/login/successPOST")*/.defaultSuccessUrl("/login/successGET")/*** 登录失败回调:*      failureUrl("/login/failGET")*      failureForwardUrl("/login/failPOST")*/.failureForwardUrl("/login/failPOST").and()/*** 注销登录配置*     1、默认注销的 URL 是 /logout,是一个 GET 请求,我们可以通过 logoutUrl 方法来修改默认的注销 URL*     2、logoutRequestMatcher 方法不仅可以修改注销 URL,还可以修改请求方式,实际项目中,这个方法和 logoutUrl 任意设置一个即可*          .logoutRequestMatcher(new AntPathRequestMatcher("/logout","POST"))*     3、logoutSuccessUrl 表示注销成功后要跳转的页面*     4、deleteCookies 用来清除 cookie*     5、clearAuthentication 和 invalidateHttpSession 分别表示清除认证信息和使 HttpSession 失效,默认可以不用配置,默认就会清除*/.logout().logoutUrl("/logout").logoutSuccessUrl("/login.html").deleteCookies().clearAuthentication(true).invalidateHttpSession(true).permitAll().and().csrf().disable();}}

1.2、LoginController

/*** @Author : 一叶浮萍归大海* @Date: 2024/1/11 22:37* @Description: 登录成功 & 失败 & 注销登录相关配置*/
@RequestMapping("/login")
@RestController
public class LoginController {@GetMapping("/successGET")public R successGET() {return R.ok().data("登录成功【GET】");}@PostMapping("/successPOST")public R successPOST() {return R.ok().data("登录成功【POST】");}@GetMapping("/failGET")public R failGET() {return R.error().data("登录失败【GET】");}@PostMapping("/failPOST")public R failPOST() {return R.error().data("登录失败【POST】");}@GetMapping("/logoutGET")public R logoutGET() {return R.ok().data("注销成功【GET】");}@PostMapping("/logoutPOST")public R logoutPOST() {return R.ok().data("注销成功【POST】");}}

1.3、登录成功回调

1.3.1、概述

        前后端不分离的登录成功回调有两个关键方法,即:defaultSuccessUrl 和 successForwardUrl。那么它们之间的区别是什么呢?       

(1)successForwardUrl 表示不管你是从哪里来的,登录后一律跳转到 successForwardUrl 指定的地址。例如 successForwardUrl 指定的地址为/login/successPOST,你在浏览器地址栏输入http://localhost:7001/helloWorld,结果因为没有登录,会重定向到登录页面,即login.html页面,当你登录成功之后,就会服务端跳转到/login/successPOST;或者你直接就在浏览器输入了登录页面地址,登录成功后也是来到/login/successPOST;
(2)
defaultSuccessUrl 有一个重载的方法,先说一个参数的 defaultSuccessUrl 方法,如果我们在 defaultSuccessUrl 中指定登录成功的跳转页面为/login/successGET,此时分两种情况,如果你是直接在浏览器中输入的登录地址,登录成功后,就直接跳转到/login/successGET,如果你是在浏览器中输入了其他地址,例如 http://localhost:7001/helloWorld,结果因为没有登录,又重定向到登录页面,此时登录成功后,就不会来到/login/successGET ,而是来到 /helloWorld页面; 
(3)
defaultSuccessUrl 还有一个重载的方法,第二个参数如果不设置默认为 false,也就是我们上面的的情况,如果手动设置第二个参数为 true,则 defaultSuccessUrl 的效果和successForwardUrl 一致;

注意事项:

    一般情况下defaultSuccessUrl 和 successForwardUrl只需配置一个即可,根据自己公司实际情况进行选择。

坑:           

   defaultSuccessUrl对应的接口需为GET、successForwardUrl对应的接口需为POST,如上LoginController #successGET和successPOST:

1.4、登录失败回调

1.4.1、概述

        前后端不分离的登录失败回调也有两个关键方法,即:failureForwardUrl 和 failureUrl。那么它们之间的区别是什么呢?       

failureForwardUrl登录失败之后会发生服务端跳转,failureUrl则是在登录失败之后,会发生重定向。

1.5、注销登录

1.5.1、概述

/**
 * 注销登录配置
 *     1、默认注销的 URL 是 /logout,是一个 GET 请求,我们可以通过 logoutUrl 方法来修改默认的注销 URL
 *     2、logoutRequestMatcher 方法不仅可以修改注销 URL,还可以修改请求方式,实际项目中,这个方法和 logoutUrl 任意设置一个即可
 *          .logoutRequestMatcher(new AntPathRequestMatcher("/logout","POST"))
 *     3、logoutSuccessUrl 表示注销成功后要跳转的页面
 *     4、deleteCookies 用来清除 cookie
 *     5、clearAuthentication 和 invalidateHttpSession 分别表示清除认证信息和使 HttpSession 失效,默认可以不用配置,默认就会清除
 */

1.5.2、配置

如上。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/236064.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关注个人数据保护,肯尼亚发布新指南

近日,肯尼亚数据保护专员办公室(ODPC)发布了新的指导文件,旨在加强教育、通讯和数字信贷领域的数据保护措施,并提供了一个处理健康数据的通用指南。 这些指导意见是基于《数据保护法》(DPA)制定…

Appium 自动化测试

1.Appium介绍 1,appium是开源的移动端自动化测试框架; 2,appium可以测试原生的、混合的、以及移动端的web项目; 3,appium可以测试ios,android应用(当然了,还有firefoxos)…

《YOLO算法:基础+进阶+改进》报错解决 专栏答疑

前言:Hello大家好,我是小哥谈。《YOLO算法:基础进阶改进》专栏上线后,部分同学在学习过程中提出了一些问题,笔者相信这些问题其他同学也有可能遇到。为了让大家可以更好地学习本专栏内容,笔者特意推出了该篇…

canvas绘制流动的蚂蚁线(图文示例)

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

汽配企业MES管理系统的特点与实践

随着汽车工业的飞速发展,汽车零部件制造企业面临着日益复杂的生产环境和多样化的市场需求。为了应对这些挑战,许多汽配企业开始引入MES管理系统解决方案,以提高生产效率、优化资源配置、提升产品质量。本文将重点探讨汽配企业MES管理系统的特…

Netty 介绍、使用场景及案例

Netty 介绍、使用场景及案例 1、Netty 介绍 https://github.com/netty/netty Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可扩展的网络服务器和客户端。它是一个开源项目,最初由JBoss公司开发,现在由社区维护。Netty的…

k8s--集群调度(kube-scheduler)

了解kube-scheduler 由之前博客可知kube-scheduler是k8s中master的核心组件之一 scheduler:负责调度资源。把pod调度到node节点。他有两种策略: 预算策略:人为部署,指定node节点去部署新建的pod 优先策略:通过算法选…

怎么做微信秒活动_掀起购物狂潮,引爆品牌影响力

微信秒杀活动:掀起购物狂潮,引爆品牌影响力 在数字化时代,微信已经成为人们日常生活中不可或缺的一部分。作为中国最大的社交媒体平台,微信不仅为人们提供了便捷的通讯方式,还为商家提供了一个广阔的营销舞台。其中&a…

vue3的福音框架arco.design

前言: 在vue2于2023年底正式宣布不在维护,vue3使用越来越频繁的时刻,我们实现项目的辅助框架也越来越多。element, iview, antd 等经典框架继续风靡一时,不过也有很多好的框架,功能也强大,比如我们今天说的…

2.【CPP】入门(宏||内联函数||拷贝构造||析构函数||构造函数)

0x01.引言 1.实现一个宏函数ADD #define ADD(x,y) ((x)(y))//宏是预编译阶段完成替换,注意括号2.宏的优缺点 优点: 1.增强代码的复用性 2.宏函数不用建立栈帧,提高性能 缺点: 1.不方便调试 2.没有安全检查 0x02.内联函数 1.以空…

什么是冒泡排序?如何实现?

一、是什么 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法 冒泡排序的思想就是在每次遍历一遍未排序的数列之后,将一个数据元素浮上去(也就是排好了一个数据) 如同碳酸饮料中二氧化碳的…

摄像头视频录制程序使用教程(Win10)

摄像头视频录制程序-Win10 🥗介绍🍛使用说明🚩config.json 说明🚩启动🚩关闭🚩什么时候开始录制?🚩什么时候触发录制?🚩调参 🥗介绍 检测画面变化…

“数据要素×”行动计划发布,粮食安全监管如何应变?

近日,国家数据局发布“数据要素”三年行动计划(2024-2026年),在“数据要素现代农业“部分提到:提升农业综合生产能力,支持农业生产经营主体和相关服务企业融合利用气象、土壤、农事作业、病虫害、市场等数据…

FineBI实战项目一(17):热门商品Top10分析开发

点击新建组件,创建热门商品Top10组件。 选择柱状图,拖拽cnt(总数)到横轴,拖拽goodName到纵轴。 选择排序规则。 修改横轴和纵轴的标签名称 切换到仪表板,拖拽组件到仪表板 效果如下:

别再纠结,这8款设计工具助你轻松绘制原型图!

原型图设计工具有很多优点。除了帮助设计师快速与客户达成协议,避免项目前景的冲突外,原型图设计工具还可以让客户看到正在创建的内容。如果需要更改,原型图设计工具也可以轻松完成。本文快速总结了8种原型图设计工具。无论你是专业设计师还是…

使用AUTOSAR来开发汽车基础软件的优点

1、高质量。以前我们采用手写代码的方式,是几个工程师在战斗。现在我们采用平台,BSW代码都是供应商提供的,我们相当于后面还有一个团队陪着我们在战斗。 2、低成本。大家都说采用AUTOSAR平台好贵,但是从长远来看是值得的&#xff…

Windows安全基础:认证基础知识

目录 Windows凭据 Windows访问控制模型 访问令牌: 安全标识符(SID): 安全描述符: 令牌安全防御 1、禁止域管理员异机登录 2、开启“审核进程创建”策略 Windows凭据 SSPI(Security Support Provide…

华为ipv4+ipv6双栈加isis多拓扑配置案例

实现效果:sw1中的ipv4和ipv6地址能ping通sw2中的ipv4和ipv6地址 R2-R4为存IPV4连接,其它为ipv6和ipv4双连接 sw1 ipv6 interface Vlanif1 ipv6 enable ip address 10.0.11.1 255.255.255.0 ipv6 address 2001:DB8:11::1/64 interface MEth0/0/1 inter…

登录模块的实现

一.前期的准备工作 1.页面的布局 (1)表单的校验: 利用element-ui提供的文档绑定rules规则后实现校验 (2)跨域的配置 : 利用proxy代理来解决跨域的问题 (3)axios拦截器的配置 两个点:1. 在请求拦截的成功回调中,如果token,因为调用其它的接口需要token才能调取。 在请…

二刷Laravel 教程(用户注册)总结Ⅳ

一、显示用户信息 1)resource Route::resource(users, UsersController); 相当于下面这7个路由 我们先用 Artisan 命令查看目前应用的路由: php artisan route:list 2) compact 方法 //我们将用户对象 $user 通过 compact 方法转化为一个关联…