SpringSecurity关于关闭csrf后导致页面元素消失的问题及处理方法

2023-05-16

        在学习SpringSecurity时进行自定义登录页面的编写时,由于在学习的过程中暂时用不到csrf防护,不关闭的话后面可能会因为没考虑csrf防护而遇到一连串的问题,且关闭后直接使用GET请求也可以退出登陆,并且登陆请求中无需再携带Token了。

        但是在实验时出现了这样的问题:在SpringSecurity配置类中关闭csrf后:会导致编写的前端登录页面和主界面的一些元素的丢失。

        部分前端html代码如下:此时,用来获取csrfToken的输入标签元素位于用户名、密码输入框下方,位于登录按钮上方。

<div class="ad-auth-form">
    <div class="ad-auth-feilds mb-30">
    	<input name="username" type="text" placeholder="用户名" class="ad-input">
    	<div class="ad-auth-icon">
    		<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 483.3 483.3"><path d="M424.3,57.75H59.1c-32.6,0-59.1,26.5-59.1,59.1v249.6c0,32.6,26.5,59.1,59.1,59.1h365.1c32.6,0,59.1-26.5,59.1-59.1    v-249.5C483.4,84.35,456.9,57.75,424.3,57.75z M456.4,366.45c0,17.7-14.4,32.1-32.1,32.1H59.1c-17.7,0-32.1-14.4-32.1-32.1v-249.5    c0-17.7,14.4-32.1,32.1-32.1h365.1c17.7,0,32.1,14.4,32.1,32.1v249.5H456.4z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#9abeed"></path><path d="M304.8,238.55l118.2-106c5.5-5,6-13.5,1-19.1c-5-5.5-13.5-6-19.1-1l-163,146.3l-31.8-28.4c-0.1-0.1-0.2-0.2-0.2-0.3    c-0.7-0.7-1.4-1.3-2.2-1.9L78.3,112.35c-5.6-5-14.1-4.5-19.1,1.1c-5,5.6-4.5,14.1,1.1,19.1l119.6,106.9L60.8,350.95    c-5.4,5.1-5.7,13.6-0.6,19.1c2.7,2.8,6.3,4.3,9.9,4.3c3.3,0,6.6-1.2,9.2-3.6l120.9-113.1l32.8,29.3c2.6,2.3,5.8,3.4,9,3.4    c3.2,0,6.5-1.2,9-3.5l33.7-30.2l120.2,114.2c2.6,2.5,6,3.7,9.3,3.7c3.6,0,7.1-1.4,9.8-4.2c5.1-5.4,4.9-14-0.5-19.1L304.8,238.55z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#9abeed"></path></svg>
    	</div>
    </div>
    	<div class="ad-auth-feilds">
    		<input name="password" type="password" placeholder="密码" class="ad-input">
    		<div class="ad-auth-icon">
   				<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 482.8 482.8"><path d="M395.95,210.4h-7.1v-62.9c0-81.3-66.1-147.5-147.5-147.5c-81.3,0-147.5,66.1-147.5,147.5c0,7.5,6,13.5,13.5,13.5    s13.5-6,13.5-13.5c0-66.4,54-120.5,120.5-120.5c66.4,0,120.5,54,120.5,120.5v62.9h-275c-14.4,0-26.1,11.7-26.1,26.1v168.1    c0,43.1,35.1,78.2,78.2,78.2h204.9c43.1,0,78.2-35.1,78.2-78.2V236.5C422.05,222.1,410.35,210.4,395.95,210.4z M395.05,404.6    c0,28.2-22.9,51.2-51.2,51.2h-204.8c-28.2,0-51.2-22.9-51.2-51.2V237.4h307.2L395.05,404.6L395.05,404.6z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#9abeed"></path><path d="M241.45,399.1c27.9,0,50.5-22.7,50.5-50.5c0-27.9-22.7-50.5-50.5-50.5c-27.9,0-50.5,22.7-50.5,50.5    S213.55,399.1,241.45,399.1z M241.45,325c13,0,23.5,10.6,23.5,23.5s-10.5,23.6-23.5,23.6s-23.5-10.6-23.5-23.5    S228.45,325,241.45,325z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#9abeed"></path></svg>
    		</div>
    	</div>
    </div>

    <input type="text" th:name="${_csrf.getParameterName()}" th:value="${_csrf.token}" hidden>

    <div class="ad-other-feilds">
    	<div class="ad-checkbox">
            <label>
            <input type="checkbox" name="remeber" class="ad-checkbox">
            <span>记住我</span>
            </label>
    	</div>
    	<a class="forgot-pws-btn" href="forgot-pws.html">Forgot Password?</a>
    </div>
    <div class="ad-auth-btn">
    	<button class="ad-login-member">登录</button>
    </div>
    <p class="ad-register-text">Don't have an account? <a href="register.html">Click Here</a></p>
</form>

SpringSecurityConfiguration:此时未关闭csrf

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/static/**").permitAll() 
                .antMatchers("/**").hasRole("user") 
                .and()
                .formLogin() 
                .loginPage("/login")
                .loginProcessingUrl("/dologin") 
                .defaultSuccessUrl("/index", true)  
                .permitAll() 
                .and()
                .logout()
                .logoutUrl("/logout")  
                .logoutSuccessUrl("/login");   
     }

        生成登录页显示正常:

         而当关掉csrf防护后:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests() 
                .antMatchers("/static/**").permitAll()    
                .antMatchers("/**").hasRole("user")     
                .and()
                .formLogin()
                .loginPage("/login") 
                .loginProcessingUrl("/dologin") 
                .defaultSuccessUrl("/index", true)
                .permitAll() 
                .and()
                .logout()
                .logoutUrl("/logout") 
                .logoutSuccessUrl("/login") 
                .and()
                .csrf().disable();
     }

        此时生成的页面如下:缺少了下面的一些元素。

         在经过调试后发现,关闭了CSRF防护后,获取csrfToken的输入标签:

<input type="text" th:name="${_csrf.getParameterName()}" th:value="${_csrf.token}" hidden>

在原html中,该标签下方的元素正是关闭csrf防护后消失的元素,所以怀疑可能是该标签位置所导致其后面的页面元素缺失,所以这里将该标签放置在表单最后面,再重启服务器运行试一下。

<div class="ad-auth-form">
    <div class="ad-auth-feilds mb-30">
    	<input name="username" type="text" placeholder="用户名" class="ad-input">
    	<div class="ad-auth-icon">
    		<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 483.3 483.3"><path d="M424.3,57.75H59.1c-32.6,0-59.1,26.5-59.1,59.1v249.6c0,32.6,26.5,59.1,59.1,59.1h365.1c32.6,0,59.1-26.5,59.1-59.1    v-249.5C483.4,84.35,456.9,57.75,424.3,57.75z M456.4,366.45c0,17.7-14.4,32.1-32.1,32.1H59.1c-17.7,0-32.1-14.4-32.1-32.1v-249.5    c0-17.7,14.4-32.1,32.1-32.1h365.1c17.7,0,32.1,14.4,32.1,32.1v249.5H456.4z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#9abeed"></path><path d="M304.8,238.55l118.2-106c5.5-5,6-13.5,1-19.1c-5-5.5-13.5-6-19.1-1l-163,146.3l-31.8-28.4c-0.1-0.1-0.2-0.2-0.2-0.3    c-0.7-0.7-1.4-1.3-2.2-1.9L78.3,112.35c-5.6-5-14.1-4.5-19.1,1.1c-5,5.6-4.5,14.1,1.1,19.1l119.6,106.9L60.8,350.95    c-5.4,5.1-5.7,13.6-0.6,19.1c2.7,2.8,6.3,4.3,9.9,4.3c3.3,0,6.6-1.2,9.2-3.6l120.9-113.1l32.8,29.3c2.6,2.3,5.8,3.4,9,3.4    c3.2,0,6.5-1.2,9-3.5l33.7-30.2l120.2,114.2c2.6,2.5,6,3.7,9.3,3.7c3.6,0,7.1-1.4,9.8-4.2c5.1-5.4,4.9-14-0.5-19.1L304.8,238.55z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#9abeed"></path></svg>
    	</div>
    </div>
    	<div class="ad-auth-feilds">
    		<input name="password" type="password" placeholder="密码" class="ad-input">
    		<div class="ad-auth-icon">
   				<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 482.8 482.8"><path d="M395.95,210.4h-7.1v-62.9c0-81.3-66.1-147.5-147.5-147.5c-81.3,0-147.5,66.1-147.5,147.5c0,7.5,6,13.5,13.5,13.5    s13.5-6,13.5-13.5c0-66.4,54-120.5,120.5-120.5c66.4,0,120.5,54,120.5,120.5v62.9h-275c-14.4,0-26.1,11.7-26.1,26.1v168.1    c0,43.1,35.1,78.2,78.2,78.2h204.9c43.1,0,78.2-35.1,78.2-78.2V236.5C422.05,222.1,410.35,210.4,395.95,210.4z M395.05,404.6    c0,28.2-22.9,51.2-51.2,51.2h-204.8c-28.2,0-51.2-22.9-51.2-51.2V237.4h307.2L395.05,404.6L395.05,404.6z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#9abeed"></path><path d="M241.45,399.1c27.9,0,50.5-22.7,50.5-50.5c0-27.9-22.7-50.5-50.5-50.5c-27.9,0-50.5,22.7-50.5,50.5    S213.55,399.1,241.45,399.1z M241.45,325c13,0,23.5,10.6,23.5,23.5s-10.5,23.6-23.5,23.6s-23.5-10.6-23.5-23.5    S228.45,325,241.45,325z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#9abeed"></path></svg>
    		</div>
    	</div>
    </div>
    <div class="ad-other-feilds">
    	<div class="ad-checkbox">
            <label>
            <input type="checkbox" name="remeber" class="ad-checkbox">
            <span>记住我</span>
            </label>
    	</div>
    	<a class="forgot-pws-btn" href="forgot-pws.html">Forgot Password?</a>
    </div>
    <div class="ad-auth-btn">
    	<button class="ad-login-member">登录</button>
    </div>
    <p class="ad-register-text">Don't have an account? <a href="register.html">Click Here</a></p>
    <input type="text" th:name="${_csrf.getParameterName()}" th:value="${_csrf.token}" hidden>
</form>

        果然,更改后页面完整地显示了。而且我们发现,最下方的输入标签也消失了。

        这个问题在后面的编写Logout登出操作中再次产生,我们再利用该方法,将该标签移除或者将其放到不影响界面其他元素显示的位置上即可解决。所以说在关闭csrf获取csrfToken的标签位置不能乱放,其位置会影响页面中其后面元素的生成。

环境:

浏览器:Chrome

SpringSecurity:5.5.3

Spring-webmvc:5.3.14

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringSecurity关于关闭csrf后导致页面元素消失的问题及处理方法 的相关文章

  • VSLAM:一:VSLAM小科普

    一 目的 1 想知道 xff1a VSLAM小科普 1 将其转载 xff0c 避免作者删除 xff0c 就没有了 二 参考 1 VSLAM小科普 https zhuanlan zhihu com p 121601875 百度百科 三 注意
  • Unity3D:问题(成功):如何解决:Unity2019新建工程都空白红色感叹号报错

    目录 一 目的 1 如何解决 Unity2019新建工程都空白红色感叹号报错 2 Unity2019好几个版本新建工程都有红色感叹号空白报错 xff0c Unity卸载安装 UnityHUB卸载安装都试过 xff0c 许可证个人的 xff0
  • Unity用UGUI实现省份选择

    参考 Unity3D中使用UGUI实现省市选择器 YOLO TO GAME的博客 CSDN博客
  • Unity3D中Resources动态加载图片

    问题 xff1a unity的Resources动态加载就不必多说了 xff0c 这里出现的问题是当我把图片放入Resources文件夹后 xff0c 使用Resources Load xff08 datapath xff09 却并没有出现
  • Navicat报错:1045-Access denied for user root@localhost(using password:YES)

    解决 xff1a Navicat报错 xff1a 1045 Access denied for user root 64 localhost using password YES SET PASSWORD FOR 39 root 39 64
  • UE4添加音乐、音效

    目录 一 目的 xff1a 1 想 xff1a UE4添加音乐 音效 二 参考 1 三 操作 xff1a 完成 1 前述 xff1a 1 导入音乐 1 创建Cue 1 Cue进行设置 1 创建音乐 1 播放和暂停音乐 一 目的 xff1a
  • 《嵌入式C语言自我修养》书评

    首先 xff0c 介绍本书的内容 笔者从嵌入式工程师的视角出发 xff0c 先为我们初学者补上硬件相关基础 xff0c 如计算机工作原理和系统结构 xff08 理解程序编译 链接 安装和运行机制 xff09 CPU的工作原理 xff08 理
  • SLAM14讲之第五讲--像素坐标系、畸变、双目相机深度求解

    像素坐标系 由相似三角形的定义可得 xff1a 这是相对于成像平面的坐标变化 xff0c 我们实际上所得到的图片还要经历一层成像平面到像素平面的变换 xff0c 实际上就是相差了一个缩放和原点的平移 如此我们定义 xff1a u为横轴向右与
  • python webkit 异步抓取页面数据

    usr bin python from ghost import Ghost class FetcherCartoon def getCartoonUrl self url if url is None return false todo
  • 树莓派 Ubuntu mate 16.04使用VNC开启远程桌面

    1 安装 vncserver sudo apt span class token operator span get span class token operator span y install vnc4server 2 启动 vncs
  • 数学建模(四)-----最优化问题-----Simulate Anneal Arithmetic

    模拟退火算法的应用很广泛 xff0c 可以较高的效率求解最大截问题 Max Cut Problem 0 1背包问题 Zero One Knapsack Problem 图着色问题 Graph Colouring Problem 调度问题 S
  • 路径规划的优化

    因为这个求N个点的最短路径是将把所有可能的走法都可能尝试一遍 这样的话 如果计算十几个点之间的最短路径是没有问题的 但是问题就在如果超过二十个点位 那么最坏的情况就是需要计算20的阶乘个 这个计算是相当高的 可能会把线上的服务器打爆 或者计
  • SPL06电容式压力传感器数据读取与处理(基于STM32)

    该例程使用的开发板为正点原子的精英板F103 xff0c 相关资料请大家自行去正点原子论坛下载 首先来看一下SPL06的简介 xff0c SPL06的压强测量范围30kPa 110kPa xff0c 最大供电电压为3 6V xff0c 相对
  • 企业微信开发实战(六、自建应用-审批流程引擎之配置可信任域名、创建审批模版、发起审批)

    文章目录 4 自建应用审批状态变化通知回调4 1概述4 2代码实战 5 查询自建应用审批单当前状态5 1概述5 2代码实战 源码赞赏 4 自建应用审批状态变化通知回调 4 1概述 1 企业可以在管理后台 自建应用 设置API接收中 xff0
  • FreeRTOS内存管理之heap_4.c

    FreeRTOS内存管理之heap 4 c源码解析 每当创建任务 队列 互斥量 软件定时器 信号量或事件组时 xff0c RTOS内核会为它们分配RAM 标准函数库中的malloc 和free 函数有些时候能够用于完成这个任务 xff0c
  • git图形化管理工具

    一 独立客户端工具 1 GitHub for Desktop 全球开发人员交友俱乐部提供的强大工具 xff0c 功能完善 xff0c 使用方便 对于使用GitHub的开发人员来说是非常便捷的工具 界面干净 xff0c 用起来非常顺手 xff
  • ROS功能包

    ROS package介绍 package是什么呢 xff1f 指的是一种特定的文件结构和文件夹组合 通常将实现同一个具体功能的程序代码放到一个package中 xff0c 比如实现相机数据采集这一功能 文件结构 CMakeLists tx
  • 坐标转换tf

    tf介绍 坐标转换 TransForm 位置和姿态 坐标变换是空间实体的位置描述 xff0c 是从一种坐标系统变换到另一种坐标系统的过程 通过建立两个坐标系统之间一一对应关系来实现下图为机器人几个部件之间的坐标关系 tf概念 tf是一个用户
  • 经典Windows编程书单

    说好的这次写一个图形编程书单 但是看起来不是很好整理 xff0c 这类书散落的家里到处都是 先把经典Windows编程的书整理一下吧 xff0c 不过Windows的也到处都是很多都找不到了 xff0c 只能把找到的拍个照 xff0c 可能
  • vscode设置C++代码格式化(Clang-Format)

    vscode中只要安装了C C 43 43 扩展后 xff0c 在C C 43 43 源文件中右键就能看到格式化文档的选项 xff0c 这样就能通过该选项或者其快捷键 xff08 Shift 43 Alt 43 F xff09 来实现快速格

随机推荐