Spring Security 使用自定义认证页面|学习笔记

简介: 快速学习 Spring Security 使用自定义认证页面

开发者学堂课程【Spring Security知识精讲与实战演示(一)Spring Security使用自定义认证页面】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/730/detail/13033


Spring Security 使用自定义认证页面

 

Spring Security 可否使用自己的认证页面来完成认证。想要使用自己的认证页面就需要在 Spring Security 的主配置文件中提供对应的配置。

接下来在文件中配置认证信息。

image.png

首先输入 Spring Security如下图哪一个长得像认证信息。

image.png

Securityfrom-login,其他的网址没有 from-login。说明 Spring Security 内部默认 from 表单方式。使用这个标签。

image.png

标签中有很多的属性,login-page 是自己的页面;就用 login-page 来指定。Securityfrom-login login-page=“/login.jsp”这样就可以指定自己的 login,登录页面。

image.png

Login-processing-url 是来指定认证的处理器地址的。Login-processing-url=“/Login”认证必须经过处理器,需要指定一个处理器地址。但是需要注意处理器不是自己写的。之前登录的访问器地址是Login,只需要将这个 Login 地址配过来即可。

image.png

Default-target-url 是默认跳转的 URL 路径。

image.png

假如认证通过了,应该设置默认去哪个页面的地址。注意指的是默认,不会去原来需要去的地方。就是正在访问订单,发现没有登录,登录完之后需要继续去订单页面。默认指的是就在登录页面开始登陆,并不知道要去哪,这时候需要告诉文件去哪。此刻一般情况下去首页。

Default-target-url=“/index.jsp”

发现 index.不是首页,而是欢迎页面。但是看下图:在代码中只写了 pages/main.jsp,所以这是请求转发到 main.jsp。

image.png

既然有登录成功,就有认证失败的时候。

如果认证失败,authentication-failure-url 这是认证失败的地址。将这个配过来。

image.png

认证失败之后:authentication-failure-url=“/failer.jsp”直接到认证失败的页面即可。

到目前为止认证信息就配完了。

但是有些同学会有疑惑?认证有处理器,虽然没有点击 login,但是处理器需要接收认证的信息。Form 表单提交的认证信息,是from 表单的内部属性,应该与这里接收的属性名保持一致。

但是用自己设置的页面,不知道 login 的内部属性。下图是认证页面:

image.png

点击F12:

image.png

依次点开下图中的导航栏:

image.png

可以看到内部属性为 user name。密码的内部属性是 password。

这里就可以大胆的猜测后开就是依靠 user name 和 password 这两个参数运行的。那么在自定义页面的时候,只要写的和上图一致就可以了。

打开自定义页面 login.jsp。可以看到用户名为 user name,用户名为 password。与其保持一致。

image.png

但是这里可不可以不一致呢?

也是可以的。如下图中有 username-parameter=“”password-parameter=“”以上两个就指定属性名了。

自定义 login.jsp 可以随意写,但是写完之后需要在 spring-security 内指定一下。不指定就不识别。

image.png

保持一致之后,就无需重新指定了。所以认证的步骤就到此结束。

接下来配置退出登录信息。

image.png

如上图使用 security:logout,退出也需要有推出的 URL,选择logout-url=“/logout”前面标黄的 logout 也不是自己写的,是spring-security 提供的,直接拿过来使用即可。

image.png

Logout-success-url 意思是退出成功之后去哪,退出之后只能去login.jsp。现在的项目是公司的后台管理系统,后台的管理系统不登录是无法访问的。一旦退出就只能去登录页面。

image.png

以上就是退出登录的信息。

按理说退出登录配置完成之后就可以启动测试了。

首先需要来到我们自己指定的 login.jsp 页面,但是/**包括login.jsp。既然包括,那么访问 login.jsp 也需要一个 ROLE-USER角色。这时,如果不把 login.jsp 放行,过来找他的时候会被拦截,所以没有权限。没有权限会去 login.jsp。去了 login.jsp 发现也没有权限。那么启动之后会进入死循环。会出现一直找 login.jsp,但是一直没有权限。

因此需要将 login.jsp 放了。有两种方式:

1、放完资源依然能够经过后续的过滤器。

2、放完之后可以完全绕开 Spring Security 过滤器。什么都不使用了,与 Spring Security 无关。

希望后续依然经过过滤器还是不在与过滤器有关系?

Login 页面即便是匿名访问,哪怕是登录失败也要经过过滤器。因为登录失败之后要去失败的页面,这个操作是 Spring Security 做的。Spring Security 做的,又想不经过 Spring Security 的过滤器是不可能的。所以这时必须要求这个页面同意匿名访问。

现在配置让认证页面可以匿名访问。指的就是这个页面可以不登陆就访问。但是即便不登录,后续的过滤器也可以经过。

Securityintercept-url pattern,依然是login.jsp。因为是对它放行。Access=“permitALL()”/这就表示依然会经过后续所有的权限验证。

到此自定义的认证信息就配置完毕了。接下来就需要启动项目,看看效果了。启动之后看自定义的认证页面能否顺利的跳转。

发现启动之后跳转是正常的,但是页面样式出现了错误:

image.png

其实可以大胆的想象,页面是没有样式的。

image.png

上图标蓝的资源会自动向服务器发送请求,href、image、gs都可以向服务器发请求。但是只要是向服务器发请求,就会被/**拦住。这样就展示不出请求。所以需要将以上的静态资源统统释放。让他们不要来,之后来了后续的步骤就没有办法继续做了。

那么这些内容的释放和认证页面的释放有什么区别?

Login 有可能会失败,失败会去失败页面。但是静态资源不会失败,Spring Security 无需对静态资源做处理。也就是说静态资源无需再经过后续的过滤器了。这时就可以将他们彻底释放了。这就叫释放静态资源。注意 Spring MAC 也有静态资源,但是和这里的是不一样的。Spring MAC 的释放资源是不让前端控制器去拦截,但是这个释放资源是不让 intercept pattern 路径拦截。

如何释放静态资源?

image.png

Security:http

image.png

这里后面加上 pattern,加上/cass/**表示css下的所有文件以及子目录的文件所有的都拦截。拦截之后:Security=“none”意思是与Security没有关系了。

image.png

如图所示,需要加上 img、plugins.这样静态资源就都释放了。

重新启动。(最好关闭重新启动,不要刷新)看看静态资源释放之后的认证页面。(带有样式的认证页面)

下图才是自定义的认证页面。

image.png

相关文章
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
2054 5
|
2月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
12686 60
|
3月前
|
监控 安全 Java
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
Spring Boot 通过 Actuator 模块提供了强大的健康检查功能,帮助开发者快速了解应用程序的运行状态。默认健康检查可检测数据库连接、依赖服务、资源可用性等,但在实际应用中,业务需求和依赖关系各不相同,因此需要实现自定义健康检查来更精确地监控关键组件。本文介绍了如何使用 @HealthEndpoint 注解及实现 HealthIndicator 接口来扩展 Spring Boot 的健康检查功能,从而提升系统的可观测性与稳定性。
286 0
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
|
9月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
498 0
|
9月前
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
364 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
6月前
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
1046 2
|
8月前
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
204 20
|
10月前
|
Java 应用服务中间件 Scala
Spring Boot 实现通用 Auth 认证的 4 种方式
本文介绍了在Spring Boot中实现通用Auth的四种方式:传统AOP、拦截器(Interceptor)、参数解析器(ArgumentResolver)和过滤器(Filter)。每种方式都通过实例代码详细说明了实现步骤,并总结了它们的执行顺序。首先,Filter作为Servlet规范的一部分最先被调用;接着是Interceptor,它可以在Controller方法执行前后进行处理;然后是ArgumentResolver,在参数传递给Controller之前解析并验证参数
227 1
|
9月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常
本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。
451 0

热门文章

最新文章