当前位置: 首页 > article >正文

SpringSecurity创建一个简单的认证应用

1、SpringSecurity 的简介

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,它是Spring项目组中用来提供安全认证服务的框架,能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案。

Spring Security 的前身是 Acegi Security。它是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。Spring Security采用了AOP(面向切面编程)思想,并基于Servlet过滤器实现。

2、基于 SpringSecurity 的简单的认证

【示例】SpringBoot 整合 SpringSecurity 创建一个简单的认证应用。

(1)创建 SpringBoot 项目,项目结构如下图:

(2)添加 Maven 依赖

在 pom.xml 配置文件中添加 Spring Security 依赖、Thymeleaf 模板引擎。

<!-- Spring Security 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.7.18</version>
</dependency>

<!-- Thymeleaf 模板引擎 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在引入 Spring Security 项目之后,虽然没有进行任何的配置或编辑,但 Spring Security 有一个默认的运行状态(在 WebSecurityConfigurefAdapter 这个抽象类中实现,有 Spring Boot 自动配置生效),要求在经过 HTTP 表单认证后才能访问对应的 URL 资源,其默认使用的用户为 user,密码则是动态生成并打印到控制台的一串随机密码。

(3) 配置登录人员

在 application.yml 配置文件中,配置 Spring Security 的登录人名称和密码。

spring:
  # 使用Thymeleaf模板引擎
  thymeleaf:
    mode: HTML5
    encoding: UTF-8
    cache: false
    servlet:
      content-type: text/html
  # Spring security 配置
  security:
    user:
      name: panjunbiao
      password: 123456

(4)编写控制器类

创建 IndexController 控制器类,实现跳转到首页,同时获取当前登录人的名称。

package com.pjb.securitydemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.security.Principal;

/**
 * 首页控制器
 * @author pan_junbiao
 **/
@Controller
public class IndexController
{
    /**
     * 首页
     */
    @RequestMapping("/")
    public String index(HttpServletRequest request)
    {
        //获取当前登录人
        String userName = "未登录";
        Principal principal = request.getUserPrincipal();
        if(principal!=null)
        {
            userName = principal.getName();
        }

        //返回页面
        request.setAttribute("userName",userName);
        return "/index.html";
    }

}

(5)编写首页

在 resources\templates 资源目录下,创建 index.html 页面。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <meta name="author" content="pan_junbiao的博客">
</head>
<body>
    <h1 style="color: red">Hello,Spring Security</h1>
    <p>博客信息:您好,欢迎访问 pan_junbiao的博客</p>
    <p>博客地址:https://blog.csdn.net/pan_junbiao</p>
    <p th:text="'当前登录人:' + ${userName}"></p>
    <a href="/logout">登出</a>
</body>
</html>

(6)运行项目

(7)成功登录后,跳转至首页

(8)登出

登出的地址:/logout,则跳转至默认的登出页面。


http://www.kler.cn/a/404563.html

相关文章:

  • ss 命令的基本用法
  • 【Vue】Vue指令
  • 实战 | C#中使用YoloV8和OpenCvSharp实现目标检测 (步骤 + 源码)
  • 安全见闻5
  • [模板总结] - 单向链表LinkedList操作
  • 【Pikachu】SSRF(Server-Side Request Forgery)服务器端请求伪造实战
  • Flink Lookup Join(维表 Join)
  • 使用TensorFlow实现简化版 GoogLeNet 模型进行 MNIST 图像分类
  • 对subprocess启动的子进程使用VSCode python debugger
  • 【Linux】软件包管理器yum、编辑器vim
  • Kafka中ACKS LSO LEO LW HW AR ISR OSR解析
  • Spring Bean 的生命周期详解
  • 笔记--(Shell脚本01)、正则表达式与文本处理器
  • 零基础Java第二十二期:异常(二)
  • 【Nginx从入门到精通】05-安装部署-虚拟机不能上网简单排错
  • 大语言模型与图结构的融合: 推荐系统中的新兴范式
  • 基于LLama_factory的Qwen2.5大模型的微调笔记
  • Scala中的集合复习(1)
  • 2024中国报业技术年会 | 文盾信息聚焦AI大模型的内容安全风控实践
  • Easyexcel(3-文件导出)
  • 鸿蒙多线程开发——线程间数据通信对象02
  • 用Python爬虫“偷窥”1688商品详情:一场数据的奇妙冒险
  • Scala的Array多维数组
  • 介绍一下strncmp(c基础)
  • 大学课程项目中的记忆深刻 Bug —— 一次意外的数组越界
  • 【Linux】系统调用和库函数汇总整理