Spring Security使用总结二,本来就是想用个数据库,没想到还是沾到Spring Security

news2024/11/27 14:40:31

上一章介绍了最简单的一个Security的使用。有一个登录界面,有一个默认的用户,和一个随机生成的密码,为了后期这个登录我能使用自己的,所以需要使用一个数据库存储用户名和密码,这一章和Spring Security本无关,但是在使用时发现,也有点的关系。

因为我的需求相对简单,我又不想整个复杂的数据库,为了简化数据库这一环,在Spring Security上更深入研究,所以使用了H2数据库,因为这个数据库不需要你安装任何的客户端,添加依赖如下直接就能使用。

<!--H2数据库-->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version> 2.1.214</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.7.4</version>
</dependency>

在配置文件application.properties中添加对应的配置

spring.datasource.url=jdbc:h2:file:./h2data/user_info
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

现在启动程序,并且访问localhost:8080/h2-console , 按照第一章的步骤输入用户名和生成的密码,就可以访问h2数据库的可视化页面中的登录页面了。

在JDBC_URL中填入配置文件里面url的地址,点击connect,就会出现下面的页面

为什么会这样?因为security阻止你访问了这个页面,这个时候security的作用终于展现出来了,就是阻碍你的开发,为了能够访问这个页面,就要对security进行一个配置。

新建一个类:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter  {

    private final String[]  matchers = new String[]{
            "/h2-console/**"
    };

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
                //关闭csrf
                .csrf().disable()
                //不通过Session获取SecurityContext
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers(matchers).anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated();
    }
}

这个类里面设置了,除了可以匿名访问/h2-console/开头的地址,其余地址都需要授权才能访问,这个时候我们再启动程序,你就会发现默认的登录页面没有了,你访问localhost:8080/hello访问不了了,也没有登录页让你登录了,这是因为你覆盖了security的默认配置,有了你自己的配置,所以默认带的登录页等配置就统统消失了,就好比你长大了,翅膀硬了,有了自己的想法了,小时候的特权以及优待统统消失不见了,不好意思,上一句话说多了。

这个时候再访问localhost:8080/h2-console,还是可以弹出之前的页面,然后再次点击connect,就会出现下面这种页面:

这个嵌入页面也不给你显示,这个时候就需要在配置的代码里面加一行代码

@Override
protected void configure(HttpSecurity http) throws Exception {

    http
            //关闭csrf
            .csrf().disable()
            //不通过Session获取SecurityContext
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .authorizeRequests()
            .antMatchers(matchers).anonymous()
            // 除上面外的所有请求全部需要鉴权认证
            .anyRequest().authenticated()
            .and() 
            .headers().frameOptions().sameOrigin();
}

重启项目,第三次访问,终于出现了数据库可视化的完整界面了。

到目前为止,项目的文件结构如下所示:

相对于上一章的文件来说,多出了数据库文件,一个java类,一个配置文件,pom中多出了依赖,其余的代码均为改变,而启动程序之后,可以访问h2数据库的可视化页面,但是却无法访问到HelloWorldController里面的hello服务了。

最后说一嘴,H2数据库怎么使用自己研究,我的主攻方向还是使用Spring Security。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何做好网页配色,分享一些配色方案和方法

很多网页设计师在选择网页配色方案时&#xff0c;会纠结于用什么网页UI配色方案来吸引客户的注意力&#xff0c;传达信息。选择正确的颜色是网页设计不可或缺的一部分。本指南将从色彩理论和色彩心理学入手&#xff0c;分享三个网页UI配色的简单步骤。 网页UI配色方法有很多&a…

零代码编程:用ChatGPT批量重命名多个子文件夹里面的文件标题名

一个文件夹&#xff1a;D:\英语学习图书配套资源\亲子英语游戏书&#xff0c;这本最好玩&#xff0c;里面有多个子文件夹&#xff1a; 子文件夹里面的文件要重命名&#xff0c;将文件名称中的track替换为子文件夹名称&#xff1a; 在ChatGPT中输入提示词&#xff1a; 你是一个…

小程序提升“用户粘性”的10个方法

个性化推荐&#xff1a;通过用户行为数据分析&#xff0c;提供个性化的内容和推荐&#xff0c;以增加用户的兴趣和参与度。优惠和奖励&#xff1a;提供用户独有的优惠&#xff0c;折扣和奖励措施&#xff0c;如会员等级制度&#xff0c;积分制度等&#xff0c;以激励用户持续使…

电磁铁的使用注意事项

电磁铁是比较常用的磁场设备&#xff0c;在与磁性研究相关的实验室里&#xff0c;我们能经常看到&#xff0c;那磁场设备在使用的时候&#xff0c;包括各类电磁铁、亥姆霍兹线圈、螺线管等&#xff0c;有什么需要注意的事项呢&#xff1f; 电磁铁设备主要包括电磁铁以及配套电…

第五部分:Tomcat

5.1&#xff1a;JavaWeb 5.1.1&#xff1a;JavaWeb的概念 ①什么是JavaWeb? JavaWeb是指所有通过Java语言编写可以通过浏览器访问的程序的总称 JavaWeb是基于请求和响应来开发的 ②什么是请求&#xff1f; 请求是指客户端给服务器发送数据&#xff0c;叫请求Request ③什么是…

Web的兼容性测试主要测什么?

1.兼容性测试主要测什么&#xff1f; 对于兼容性测试我了解的很少&#xff0c;之前觉得兼容性测试&#xff0c;就是开发出来网站&#xff0c;在不同的浏览器上显示的是否正常&#xff0c;会不会因为浏览器不同&#xff0c;网站的显示样式&#xff0c;功能&#xff0c;获取的数…

BIOS开发笔记 - DDR中的时序参数

通过前一篇文章学习,我们可以大致知道内存条(Module)的组成及SDRAM内部的结构,这一篇再介绍下SDRAM中常见的时序参数以及整个读写操作的流程。 一、外部信号 图1 DDR4的外部线路图 DDR是一种高带宽的传输接口,其外部信号较多,图1是一个DDR4的外部线路图,以下对图中跟通…

使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤)

目录 一、前提二、MySQL 生产安装1&#xff0c;拉取mysql2&#xff0c;查看mysql镜像3&#xff0c; 启动 mysql 容器4&#xff0c;修改mysql的中文编码5&#xff0c;查看验证mysql的中文编码 三、Mysql主机 mysql_master 的安装与配置1&#xff0c; 拷贝master容器2&#xff0c…

chrome 扩展 popup 弹窗的使用

popup的基本使用方法 popup介绍 popup 是点击 browser_action 或者 page_action图标时打开的一个小窗口网页&#xff0c;焦点离开网页就立即关闭&#xff0c;一般用来做一些临时性的交互。 popup配置 V3版本中&#xff08;V2版本是在 browser_action 中 &#xff09;&#x…

Python武器库开发-常用模块之base64模块(十四)

常用模块之base64模块(十四) 在Python中&#xff0c;base64是内置的常用的标准模块&#xff0c;base64模块是用来作base64编码解码&#xff0c;常用于小型数据的传输。我们可以直接通过import导入base64模块直接使用 import base64base64模块&#xff0c;除了base64之外&…

[PyTorch][chapter 61][强化学习-免模型学习1]

前言&#xff1a; 在现实的学习任务中&#xff0c;环境 其中的转移概率P,奖赏函数R 是未知的&#xff0c;或者状态X也是未知的 称为免模型学习&#xff08;model-free learning&#xff09; 目录&#xff1a; 1: 蒙特卡洛强化学习 2&#xff1a;同策略-蒙特卡洛强化学习 3&am…

紫光同创FPGA编写的8画面分割器演示

适用于板卡型号&#xff1a; 紫光同创PGL50H开发平台&#xff08;盘古50K开发板&#xff09; 图(1) 盘古50K开发板 TOP 层逻辑框 图(2) TOP层逻辑框 video_copy_ux 将输入的一路RGB888信号复制成8份&#xff0c;每份画面内容相同&#xff0c;各路颜色有些差异&#xff1a; 第…

C++ 之Google benchmark测试与分析

0. 简介 作为一个程序而言&#xff0c;benchmark是非常关键的一个衡量指标&#xff0c;无论是程序算法的指标还是程序运行性能的指标&#xff0c;这些我们都可以去完成衡量。对于性能衡量而言google benchmark无疑是一个比较好的选择 1. google benchmark安装 1.1 下载地址 …

矢量图形设计软件:Illustrator 2024(AI)中文激活版

Illustrator 2024是一款强大的矢量图形设计软件&#xff0c;它具备丰富的绘图和设计工具&#xff0c;用户可以通过画笔、铅笔、形状、路径等工具创建各种矢量图形和插图设计。新版本还增强了智能功能&#xff0c;可以自动从图像或调色板中提取颜色并应用到设计中&#xff0c;同…

云工作流 CloudFlow 重磅发布,流程式开发让云上应用构建更简单

为了让企业和开发者更快速、便捷地进行云上开发&#xff0c;阿里云重磅发布云工作流&#xff08;CloudFlow&#xff09;&#xff0c;它是一款强大的面向开发者的流程编排开发工具&#xff0c;全托管、高并发、高可用&#xff0c;帮助用户简化和自动化复杂的云上业务流程和工作流…

数据结构 - ArrayList - 动态修改的数组

目录 实现一个通用的顺序表 总结 包装类 装箱 / 装包 和 拆箱 / 拆包 ArrayList 与 顺序表 ArrayList基础功能演示 add 和 addAll &#xff0c;添加元素功能 ArrayList的扩容机制 来看一下&#xff0c;下面的代码是否存在缺陷 模拟实现 ArrayList add 功能 add ind…

Linux安装配置awscli命令行接口工具及其从aws上传下载数据

官网技术文档有全面介绍&#xff1a;安装或更新 AWS CLI 的最新版本 - AWS Command Line Interface在系统上安装 AWS CLI。https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html#getting-started-install-instructionsawscli常用命令参考&…

红海云签约澳森集团,为钢铁行业人力资源数字化转型注入新动能

辛集市澳森特钢集团有限公司&#xff08;以下简称“澳森集团”&#xff09;是集钢铁冶炼、轧钢及钢材深加工、新型建材、国际贸易、房地产开发、酒店餐饮、热力供应于一体的大型钢铁联合企业&#xff0c;是华北地区最具品牌影响力和核心竞争力的综合性大型企业集团。 近日&…

LBS营销|基于位置信息的营销策略

LBS营销&#xff08;Location-Based Services Marketing&#xff09;是一种基于位置信息的营销策略&#xff0c;它利用移动设备和位置数据来为消费者提供与其当前位置相关的个性化信息和服务。LBS营销通过分析用户的地理位置&#xff0c;向他们提供特定地点或地理区域的有关信息…

虚拟数字人技术篇

1. 虚拟数字人概念解析 虚拟数字人它是由三个部分组成:虚拟、数字、人。 虚拟:存在于非物理世界,多模态存在于各种介质;数字:数字化,可复制多个分身,多技术综合体;人:具备拟人化的外表和行为交互的能力。具体说明如下: 虚拟: 通常是指它是存在于非物理世界,可以是…