Spring Security使用总结三,编写一个注册页面,不知道你有没有强迫症

news2024/11/25 9:55:20

不像先有鸡还是先有蛋这种话题,对于系统来说必须要先注册再登录,所以这一章主要就是讲注册,对于注册来说首先就是要有一个注册的页面,从系统的安全角度去考虑,这个注册页面可以是系统自带的注册页面,也可以是符合系统注册接口要求的分离页面。

本着多学习一点知识的角度,我就整了一个系统自带的注册页面,也就是整了一个页面模板,所以就需要多依赖下面的这几个项目:一个是模板项目thymeleaf,一个是可以少写get,set方法的lombok,这里都是简单使用,不会喧宾夺主。

<!--页面模板-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.7.4</version>
</dependency>

<!--Lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.26</version>
</dependency>

因为是注册页面,肯定要多出一个注册服务,所以需要新建一个RegisterController,代码如下:

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

@Controller
public class RegisterController {

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

注意看,这里面就是用的Controller注解,而不是RestController注解,因为这里面就用到了模板,返回的就是页面的名字,既然有了页面的名字,没有页面也找不到,所以会有一个页面代码,我将这个页面代码放到了resources文件夹中的templates文件夹下,resources文件夹不用过多介绍,这个templates文件夹是我自己创建的:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">

    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />

        <title>注册</title>
    </head>

    <body>

        <div class="container">
            <div class="row">
                    <h1>注册</h1>
                    <form id="userinfo" >

                        <div class="form-group" >
                            <label for="name" class="control-label">用户名</label>
                            <input id="name" class="form-control"  />
                        </div>
                        <div class="form-group" >
                            <label for="password" class="control-label">密码</label>
                            <input id="password" class="form-control" type="password"  />
                        </div>
                        <div class="form-group" >
                            <label for="confirmPassword" class="control-label">密码确认</label>
                            <input id="confirmPassword" class="form-control" type="password"  />
                        </div>
                        <div class="form-group">
                            <button id="register" type="submit" class="btn btn-success">注册</button>
                        </div>
                    </form>
            </div>
        </div>

    </body>
</html>

有了Controller提供访问页面的途径,也有了页面资源,这个时候就需要让模板知道,这个页面资源放在那里,所以就需要在配置文件application.properties里面添加如下配置:

#thymeleaf--------------------------------
spring.thymeleaf.cache=true
spring.thymeleaf.checktemplate=true
spring.thymeleaf.check-template-location=true
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.suffix=.html
spring.thymeleaf.prefix=classpath:templates/

好了,可以启动一下,看看能不能访问到这个页面,当然访问不了,当你输入http://localhost:8080/register之后你会发现,和访问http://localhost:8080/hello是一样的,什么都没有,这个时候就需要security的配置了,在配置类里面添加点内容,如下所示,添加什么了自己发现。

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

    http
            //关闭csrf
            .csrf().disable()
            //不通过Session获取SecurityContext
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .authorizeRequests()
            //permitAll表示所有人都能访问
            .antMatchers(new String[]{"/register"}).permitAll()
            .antMatchers(matchers).anonymous()
            // 除上面外的所有请求全部需要鉴权认证
            .anyRequest().authenticated()
            .and()
            //允许加载静态资源
            .headers().frameOptions().sameOrigin();
}

启动后再次访问http://localhost:8080/register ,就会出现下面这个页面,成功完成注册页面的开发:

附加

因为我有强迫症,我看着这个页面我就很难受(其实一点不难受),所以我就必须要多添加一些东西,让这个页面看上去至少不这么丑。于是我就在页面代码中引入了一些Bootstrap的样式,在注册的HTML中加入下面几行代码:

<link rel="stylesheet" type="text/css" th:href="@{/static/css/bootstrap.min.css}"/>
<script type="text/javascript" th:src="@{/static/js/jquery-3.2.1.min.js}"></script>
<script type="text/javascript" th:src="@{/static/js/bootstrap.min.js}"></script>

你再访问http://localhost:8080/register ,你发现,什么玩意嘛,完全没有生效啊,为什么没有生效?这个没有生效的罪魁祸首依旧是security,这个security就是这么的缜密,只要你访问资源,你没有配置这个资源,那这个资源就需要认证授权后才能访问,所以这里就需要配置一下,和Controller里面的服务不同的是,这些是页面的静态资源,需要在SecurityConfig类中添加一个方法:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter

    //这里是省略的代码
    //... ...
 
    @Override
    public void configure(WebSecurity web) {
        web.ignoring().antMatchers("/static/**");
    }
}

新建一个类,代码如下所示:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    /**
     * 配置静态资源
     * @param registry 资源处理方法注册
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
    }
}

重启项目,再次访问http://localhost:8080/register ,变成了如下模样:

现在的文件结构和上一节的对比如下所示:

多了一个security的配置,多了一个注册用的controller,多了前台注册页面相关的静态资源,配置文件里面多了模板的相关配置,pom里面多了一些依赖

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

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

相关文章

学习笔记|构建一元线性回归模型|方差分析|方差齐性|检验残差正态性|规范表达|《小白爱上SPSS》课程:SPSS第二十讲: 一元线性回归分析怎么做?

目录 学习目的软件版本原始文档一元线性回归分析一、实战案例二、统计策略三、SPSS操作四、结果解读第一个表格为模型摘要第二表格为方差分析表第三个表格为模型系数第四张散点图&#xff08;主要检验方差齐性&#xff09; 第五张直方图和P-P图&#xff08;检验残差正态性&…

PHP语言、B/S手术麻醉临床信息管理系统源码

手术麻醉临床信息管理系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范麻醉科的工作流程&#xff0c;实现麻醉手术过程的信息数字化&#xff0c;自动生…

虚析构函数

1)类指针指向本身的对象 Son *xiaoming new Son; delete xiaoming; 构造及析构顺序&#xff1a; 父类构造 子类构造&#xff1b; 子类析构&#xff1b; 父类析构。 2)父类指针指向子类对象,&#xff0c;父类析构函数不是虚函数 Father *father new Son; delete f…

Redis-持久化

RDB快照&#xff08;snapshot&#xff09; &#xff08;1&#xff09;Redis将内存数据库快照保存dump.rdb的二进制文件中 &#xff08;2&#xff09;Redis将内存flush到磁盘文件的默认策略&#xff1a; N秒内数据集至少有M个改动 &#xff08;3&#xff09;Redis允许手动flush&…

Android Studio(RecyclerView)

前言 ListView的缺点&#xff0c;在RecyclerView得到了补充改善&#xff08;横纵向排列子元素、多列布局等等&#xff09; 代码 前面在适配器章节已经介绍了其对应的适配器&#xff0c;这里就简单展示一下多列布局的页面效果和相关代码 <androidx.recyclerview.widget.Recyc…

干货|AI辅助完成论文的正确打开方式!

论文写作中可能遇到问题 1. 选题问题&#xff1a;是否无法确定研究方向和选择合适的题目&#xff1f; 2. 文献综述问题&#xff1a;是否困惑如何进行文献调研和综述&#xff1f; 3. 方法论问题&#xff1a;是否不知道该选择何种研究方法&#xff1f; 4. 数据处理问题&#…

【Kubernetes部署】通过Kubeadm部署Kubernetes高可用集群

Kubeadm 一、kubeadm部署思路二、基本架构2.1 资源分配2.2 系统初始化操作&#xff08;所有节点&#xff09;2.2.1关闭防火墙、selinux和swap分区2.2.2 修改主机名&#xff0c;添加域名映射2.2.3 内核相关2.2.4 加载ip_vs模块2.2.5 时间同步 三、部署docker3.1 通过yum安装dock…

10个免费3D模型网站

作为一名独立游戏开发者,自己创建图形、配乐、动画和更多东西是相当具有挑战性的。 创建资产所需的成本和时间有时是许多游戏开发商无法承受的。 这就是他们选择在互联网上搜索免费内容的原因。现在,在浩瀚的内容海洋中获得如此免费的东西有点困难。 本文列出了 10 个免费 3D…

C语言34种运算符的用法解析

C 算术运算符 操作员运算符的含义加法或一元加法-减法或一元减法*乘法/分配%除法后的余数&#xff08;模除&#xff09; // 算数运算符的使用 #include <stdio.h> int main() {int a 9,b 4, c;c ab;printf("ab %d \n",c);c a-b;printf("a-b %d \n…

R语言环境下使用curl库做的爬虫代码示例

curl库是一个用于传输数据的工具和库&#xff0c;它支持多种协议&#xff0c;包括HTTP、FTP、SMTP等。在爬虫中&#xff0c;curl库可以用来获取网页内容&#xff0c;从而实现爬取网页的功能。通过设置curl的选项&#xff0c;可以实现对网页的请求、响应、重定向等操作。在使用c…

【前段基础入门之】=>CSS3新特性 @keyframes 动画

导语 在 CSS3 新特性中&#xff0c;新增了动画效果 的定义方式&#xff0c;这使得我们可以通过使用 CSS&#xff0c;从而开发出精美的动画效果&#xff0c;所以本章节&#xff0c;就来详细聊一聊如何通过 CSS 去创建一个动画效果案例 帧 **学习动画之前&#xff0c;我们得先了…

windows11 画图软件调整图片大小

win11自带的画图功能可以调整图片的大小和尺寸 搜索 画图&#xff0c;点击画图应用&#xff0c;打开图片 要把图片调整成800*1200。先打开文件菜单 选择图像属性 此处可以调整图片的尺寸和大小&#xff08;非等比例调整&#xff09; 选择图像下调整大小&#xff08;等比例调整…

什么叫SSH?原理详解,看这一篇就够了!

你们好&#xff0c;我的网工朋友。 SSH是一种加密的网络安全协议&#xff0c;用于安全地远程登录和执行命令。 目前SSH协议已经被全世界广泛使用&#xff0c;大多数设备都支持SSH功能。 但你真的会用吗&#xff1f; 今天就从SSH是什么、怎么用出发&#xff0c;给你详解一下之…

用AI魔法打败AI魔法

全文均为AI创作。 此为内容创作模板&#xff0c;在发布之前请将不必要的内容删除当前&#xff0c;AI技术的广泛应用为社会公众提供了个性化智能化的信息服务&#xff0c;也给网络诈骗带来可乘之机&#xff0c;如不法分子通过面部替换语音合成等方式制作虚假图像、音频、视频仿…

知识注入以对抗大型语言模型(LLM)的幻觉11.6

知识注入以对抗大型语言模型&#xff08;LLM&#xff09;的幻觉 摘要1 引言2 问题设置和实验2.1 幻觉2.2 生成响应质量 3 结果和讨论3.1 幻觉3.2 生成响应质量 4 结论和未来工作 摘要 大型语言模型&#xff08;LLM&#xff09;内容生成的一个缺点是产生幻觉&#xff0c;即在输…

el-select多选以tag展示时,超过显示长度以...省略号显示,且在一行展示

效果&#xff1a; 代码&#xff1a; <span>系统词典维度&#xff1a;</span><el-selectv-model"dNum"placeholder"请选择"multiplecollapse-tags //设置collapse-tags属性将它们合并为一段文字size"small"style"width:160p…

宏转录组分析揭示不同土壤生境中氮循环基因的表达

发表期刊&#xff1a;msystems 发表时间&#xff1a;2023 影响因子&#xff1a;6.4 DOI: 10.1128/msystems.00315-23 01、研究背景 与空白土壤相比&#xff0c;植物根系和根际细菌之间的相互作用调节了氮&#xff08;N&#xff09;的循环过程&#xff0c;并创造了富含低分…

维乐 Prevail Glide带你做破风王者,无阻前行!

对于自行车骑手来说&#xff0c;需要应对的问题有很多&#xff0c;其中最大的问题之一&#xff0c;就是「风阻」。风阻永远都是你越反抗越强&#xff0c;因此为了克服风阻的力量&#xff0c;时间久了&#xff0c;身体自然会造成一定程度的损伤。如何才能调整前行的步伐&#xf…

《006.Springboot+vue之旅游信息推荐系统》【有文档】

《006.Springbootvue之旅游信息推荐系统》【有文档】 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;DEA jdk1.8 Maven MySQL 前后端分离; 后台&#xff1a;SpringBootMybatis; 前台&#xff1a;vueElementUI; [2]功能模块展示&#xff1a; …

VSCode配置SonarLint/SonarLint连接SonarQube

本文介绍前端开发工具vscode安装sonarlint插件&#xff0c;配置本地代码扫描步骤 点击VSCode左侧工具栏的“扩展”&#xff0c;搜索“SonarLint”并安装插件 插件安装完成后&#xff0c;点击VSCode顶部工具栏的“查看”→“打开视图…”&#xff0c;并点击弹窗中的“SonarLint…