Security安全认证 | Spring Boot如何集成Security实现安全认证

简介: 前面介绍了Spring Boot 使用JWT实现Token验证,其实Spring Boot 有完整的安全认证框架:Spring Security。接下来我们介绍如何集成Security 实现安全验证。

前面介绍了Spring Boot 使用JWT实现Token验证,其实Spring Boot 有完整的安全认证框架:Spring Security。接下来我们介绍如何集成Security 实现安全验证。


一、Security简介

安全对于企业来说至关重要,必要的安全认证为企业阻挡了外部非正常的访问,保证了企业内部数据的安全。

当前,数据安全问题越来越受到行业内公司的重视。数据泄漏很大一部分原因是非正常权限访问导致的,于是使用合适的安全框架保护企业服务的安全变得非常紧迫。在Java领域,Spring Security无疑是最佳选择之一。

Spring Security Spring 家族中的一个安全管理框架,能够基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案。它提供了一组可以在Spring应用系统中灵活配置的组件,充分利用了 SpringIoCDIAOP等特性,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。


二、Spring Boot对Security的支持


虽然,在Spring Boot出现之前,Spring Security已经发展多年,但是使用并不广泛。安全管理这个领域一直是Shiro的天下,因为相对于Shiro,在项目中集成Spring Security还是一件麻烦的事情,所以Spring Security虽然比Shiro强大,但是却没有Shiro受欢迎。


随着Spring Boot的出现,Spring Boot Spring Security 提供了自动化配置方案,可以零配置使用 Spring Security。这使得Spring Security重新焕发新的活力。


Spring Boot 提供了集成 Spring Security 的组件包 spring-boot-starter-security,方便我们在 Spring Boot 项目中使用 Spring Security进行权限控制。


三、集成Security

Spring Boot 项目中集成Spring Boot Security 非常简单,只需在项目中增加Spring Boot Security的依赖即可。下面通过示例演示Spring Boot中基础Security的登录验证。

1. 添加依赖

Spring Boot 提供了集成 Spring Security 的组件包 spring-boot-starter-security,方便我们在 Spring Boot 项目中使用 Spring Security

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

上面除了引入Security组件外,因为我们要做Web系统的权限验证,所以还添加了WebThymeleaf组件。


2. 配置登录用户名和密码

用户名和密码在application.properties中进行配置。

# security
spring.security.user.name=admin
spring.security.user.password=admin

application.properties配置文件中增加了管理员的用户名和密码。


3. 添加Controller

创建SecurityController 类,在类中添加访问页面的入口。

@Controller
public class SecurityController {
    @RequestMapping("/")
    public String index() {
        return "index";
    }
}


4. 创建前端页面

resources/templates 目录下创建页面 index.html,这个页面就是具体的需要增加权限控制的页面,只有登录了才能进入此页。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<body>
<h1>Hello</h1>
<p>我是登录后才可以看的页面</p>
</body>
</html>


5. 测试验证

配置完成后,重启项目,访问地址:http://localhost:8080/,页面会自动弹出一个登录框,如下图所示。

image.png

系统自动跳转到Spring Security默认的登录页面,输入之前配置的用户名和密码就可以登录系统,登录后的页面如下图所示。

image.png            


通过上面的示例,我们看到Spring Security自动给所有访问请求做了登录保护,实现了页面权限控制。


四、登录验证

前面演示了在Spring Boot项目中集成Spring Security 实现简单的登录验证功能,在实际项目使用过程中,可能有的功能页面不需要进行登录验证,而有的功能页面只有进行登录验证才能访问。下面通过完整的示例程序演示如何实现Security的登录认证。

1. 创建页面content.html

先创建页面content.html,此页面只有登录用户才可查看,否则会跳转到登录页面,登录成功后才能访问。示例代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<body>
<h1>content</h1>
<p>我是登录后才可以看的页面</p>
<form method="post" action="/logout">
    <button type="submit">退出</button>
</form>
</body>
</html>

在上面的示例中,我们看到退出使用post请求,因为Security退出请求默认只支持 post


2. 修改index.html 页面

修改之前的index.html页面,增加登录按钮。

<p>点击 <a th:href="@{/content}">这里</a>进入管理页面</p>

在上面的示例中,index页面属于公共页面,无权限验证,从index页面进入content页面时需要登录验证。


3. 修改Controller控制器

修改之前的SecurityController控制器,增加content页面路由地址,示例代码如下:

@RequestMapping("/")
public String index() {
    return "index";
}
@RequestMapping("/content")
public String content() {
    return "content";
}


4. 创建 SecurityConfig

创建 Security的配置文件SecurityConfig类,它继承于 WebSecurityConfigurerAdapter,现自定义权限验证配置。示例代码如下:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/", "/home").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .permitAll()
            .and()
            .logout()
            .permitAll()
            .and()
            .csrf()
            .ignoringAntMatchers("/logout");
    }
}

在上面的示例程序中,SecurityConfig类中配置 index.html 可以直接访问,但 content.html 需要登录后才可以查看,没有登录自动跳转到登录页面。

  • @EnableWebSecurity:开启 Spring Security 权限控制和认证功能。
  • antMatchers("/", "/home").permitAll():配置不用登录可以访问的请求。
  • anyRequest().authenticated():表示其他的请求都必须有权限认证。
  • formLogin():定制登录信息。
  • loginPage("/login"):自定义登录地址,若注释掉,则使用默认登录页面。
  • logout():退出功能,Spring Security自动监控了/logout
  • ignoringAntMatchers("/logout")Spring Security 默认启用了同源请求控制,在这里选择忽略退出请求的同源限制。


5. 测试验证

修改完成之后重启项目,访问地址http://localhost:8080/可以看到 index 页面的内容,单击链接跳转到content页面时会自动跳转到登录页面,登录成功后才会自动跳转到http://localhost:8080/content,在 content 页面单击“退出”按钮,会退出登录状态,跳转到登录页面并提示已经退出。

image.png

登录、退出、请求受限页面退出后跳转到登录页面是常用的安全控制案例,也是账户系统基本的安全保障。


最后

以上,我们就把Spring Boot如何集成Security实现安全认证介绍完了。




推荐阅读:

SpringBoot从入门到精通(三十四)如何集成JWT实现Token验证

实战:使用Spring Boot Admin实现运维监控平台

Druid数据库连接 | Spring Boot 集成 Druid实现数据库连接和完善的SQL执行监控

非常简单 | 使用Actuator 从零开始搭建Spring Boot 应用监控系统

极简教程 | Spring Boot整合Elasticsearch实现数据搜索引擎

相关文章
|
2月前
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
190 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
4月前
|
XML 人工智能 Java
Spring Boot集成Aviator实现参数校验
Aviator是一个高性能、轻量级的Java表达式求值引擎,适用于动态表达式计算。其特点包括支持多种运算符、函数调用、正则匹配、自动类型转换及嵌套变量访问,性能优异且依赖小。适用于规则引擎、公式计算和动态脚本控制等场景。本文介绍了如何结合Aviator与AOP实现参数校验,并附有代码示例和仓库链接。
301 0
|
4月前
|
安全 Java 数据库
第16课:Spring Boot中集成 Shiro
第16课:Spring Boot中集成 Shiro
740 0
|
4月前
|
消息中间件 存储 Java
第15课: Spring Boot中集成ActiveMQ
第15课: Spring Boot中集成ActiveMQ
465 0
|
5月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
620 0
|
2月前
|
监控 Cloud Native Java
Spring Integration 企业集成模式技术详解与实践指南
本文档全面介绍 Spring Integration 框架的核心概念、架构设计和实际应用。作为 Spring 生态系统中的企业集成解决方案,Spring Integration 基于著名的 Enterprise Integration Patterns(EIP)提供了轻量级的消息驱动架构。本文将深入探讨其消息通道、端点、过滤器、转换器等核心组件,以及如何构建可靠的企业集成解决方案。
250 0
|
4月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
406 3
|
4月前
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
517 0
第07课:Spring Boot集成Thymeleaf模板引擎
|
5月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
934 0

热门文章

最新文章

下一篇
oss云网关配置