您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

SpringSecurity实现自定义登录界面

时间:2021-12-06 17:41:30  来源:  作者:波哥带你学Java

 前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用自定义的登录界面,本文我们就来介绍下如何实现该操作。
注意:本文是在入门案例代码的基础上演示的!

一、页面准备

我们准备如下相关的jsp页面

1.login.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: dengp
  Date: 2019/12/1
  Time: 20:40
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="JAVA" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>登录管理</h1>

    <form>
        账号:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录"><br>
    </form>
    <img src="img/a1.jpg">
</body>
</html>

2.home.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>home界面</h1>
</body>
</html>

3.其他页面

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

二、SpringSecurity相关配置

1.配置认证信息

配置登录和注销相关的信息

<security:http auto-config="true" use-expressions="true">
    <!--
        拦截资源
        pattern="/**" 拦截所有的资源
        access="hasanyrole('role1')" 表示只有role1这个角色可以访问资源
     -->
    <security:intercept-url pattern="/**" access="hasanyrole('role_user')"></security:intercept-url>
    <!--
        配置认证信息
     login-page="/login.jsp"  自定义的登录页面
     login-processing-url="/login" security中处理登录的请求
     default-target-url="/home.jsp" 默认的跳转地址
     authentication-failure-url="/failure.jsp" 登录失败的跳转地址
     -->
    <security:form-login login-page="/login.jsp"
                        login-processing-url="/login"
                         default-target-url="/home.jsp"
                         authentication-failure-url="/failure.jsp"
    />
    <!-- 配置退出的登录信息 -->
    <security:logout logout-url="/logout"
                     logout-success-url="/login.jsp"
    />
</security:http>

2.认证界面匿名访问

前面配置的

<security:intercept-url pattern="/**" access="hasanyrole('role_user')"></security:intercept-url>

会使登录界面不可访问,所以我们需要方法

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

3.放过静态资源

同样的系统的 js css 等静态资源文件也会被对应的过滤器拦截,所以也需要方法

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

4.登录测试

启动服务我们访问登录试试

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

可以访问到,然后提交登录看看
注意表单设置

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


然后访问出现了403错误

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

三、关闭csrf拦截

  上面我们在账号和角色都正确的情况下,登录后出现了 403错误,原因是因为 csrf过滤器拦截了,那为什么系统提供的登录界面没问题呢?原因是如下

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


在系统提供的登录表单中隐藏的有csrf相关的信息。这时我们可以关闭csrf过滤器,来实现登录工作

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

重启服务再测试就可以了

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

四、csrf防护

  上面我们通过关闭csrf过滤器实现了认证功能,但是系统将面临csrf攻击的风险,所以我们需要放开服务,同时也要能够完成认证。首先我们来看下CsrfFilter的源码

1.CsrfFilter源码查看

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


this.requireCsrfProtectionMatcher.matches(request)方法

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


通过 GET HEAD TRACE OPTIONS 提交的数据不会 csrf 验证

2.放开过滤器

前面关闭的我们需要放开

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

3.页面动态token

导入security标签

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


在表单中使用,作用和下面的一致

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


:ajax方式提交的时候使用

五、注销功能

在home.jsp中添加注销链接

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

点击后出现了404错误原因是:自定义的注销功能必须通过post方式提交才行,所以如下

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

出现这个原因是 csrf的原因,加标签即可

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

搞定~



Tags:SpringSecurity   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  Tags: SpringSecurity  点击:(18)  评论:(0)  加入收藏
通过前面几篇文章我们详细的介绍了SpringSecurity的使用,本文我们来看下,结合JWT来实现单点登录操作。一、什么是单点登陆&emsp;&emsp;单点登录(Single Sign On),简称为 SSO,是目...【详细内容】
2020-12-14  Tags: SpringSecurity  点击:(16880)  评论:(0)  加入收藏
前言Java下常用的安全框架主要有Spring Security和shiro,都可提供非常强大的功能,但学习成本较高。在微服务下鉴权多多少少都会对服务有一定的入侵性。 为了降低依赖,减少入侵,...【详细内容】
2020-08-28  Tags: SpringSecurity  点击:(84)  评论:(0)  加入收藏
▌简易百科推荐
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Python阿杰    Tags:FastAPI   点击:(6)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  java老人头    Tags:框架   点击:(11)  评论:(0)  加入收藏
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~后面几篇文章应该会讲讲这些内容啦 Spring AOP 插件 (了好久都忘了 ) 分享下 4ye 在项目中利用 AOP + MybatisPlus 对...【详细内容】
2021-12-07  Java4ye    Tags:Spring   点击:(14)  评论:(0)  加入收藏
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  波哥带你学Java    Tags:SpringSecurity   点击:(18)  评论:(0)  加入收藏
React 简介 React 基本使用<div id="test"></div><script type="text/javascript" src="../js/react.development.js"></script><script type="text/javascript" src="../js...【详细内容】
2021-11-30  清闲的帆船先生    Tags:框架   点击:(19)  评论:(0)  加入收藏
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  叼着猫的鱼    Tags:框架   点击:(21)  评论:(0)  加入收藏
TKinterThinter 是标准的python包,你可以在linx,macos,windows上使用它,你不需要安装它,因为它是python自带的扩展包。 它采用TCL的控制接口,你可以非常方便地写出图形界面,如...【详细内容】
2021-11-30    梦回故里归来  Tags:框架   点击:(26)  评论:(0)  加入收藏
前言项目中的配置文件会有密码的存在,例如数据库的密码、邮箱的密码、FTP的密码等。配置的密码以明文的方式暴露,并不是一种安全的方式,特别是大型项目的生产环境中,因为配置文...【详细内容】
2021-11-17  充满元气的java爱好者  博客园  Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  AT小白在线中  搜狐号  Tags:开发框架   点击:(29)  评论:(0)  加入收藏
SpringBoot开发的物联网通信平台系统项目功能模块 功能 说明 MQTT 1.SSL支持 2.集群化部署时暂不支持retain&will类型消 UDP ...【详细内容】
2021-11-05  小程序建站    Tags:SpringBoot   点击:(55)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条