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

spring security3.x学习(5)_如何拦截用户请求

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

本课程为转载学习

原文链接:http://blog.csdn.net/dsundsun/article/details/11797835

上次看到了关于认证管理的过程,其中还有很多迷糊的地方,比如说,请求是如何被拦截的。

我们看一下第一个运行的例子,让他跑起来:
我访问一下这个url:http://localhost:8080/JBCPPets/home.do

页面将会自动跳转到:http://localhost:8080/JBCPPets/spring_security_login

我感到很奇怪,哪里出现的spring_security_login呢?、

然后我去查看了 spring security的配置文件。

<http auto-config="true" >
        <intercept-url pattern= "/*" access="ROLE_USER" />
</http >

还记得auto-config吧,他自动配置了form-login标签。 那么form-login标签究竟是什么呢。 我们查一下spring security的帮助文档
<form-login>中默认的属性中login-page和login-processing-url.咱们先来看这两个属性

172410_KLzj_1417419.jpg

所以。我们看出来了。 如果配置了form-login标签的话,登陆方面至少涉及了两个拦截,一个是"/spring_security_login"(匹配映射登陆页面)"/j_spring_security_check"(映射匹配UsernamePasswordAuthenticationFilter的filterProcessesUrl这个属性)

当配置了auto-config="true"时,<form-login>标签将自动配置(这个好像已经说过了),然后通过拦截顺序进行依次的匹配拦截。

在这里我们只需要知道。当我有<form-login>这个标签的时候,会配置两个url拦截,如果没有登录的话,却要访问授权资源文件的话,会被拦截到登陆页面,这个登陆页面是系统自动进行匹配的

"/_spring_security_check"是拦截提交过来的数据用的。这样说可能会很枯燥, 还记得刚开始我们提到的表单么。我们来看一下他的源码就应该知道大概的流程了:

<pre name="code" class="html"><html>
    
    <head>
        <title>
            Login Page
        </title>
    </head>
    
    <body onload='document.f.j_username.focus();'>
        <h3>
            Login with Username and Password
        </h3>
        <form name='f' action='/JBCPPets/j_spring_security_check' method='POST'>
            <table>
                <tr>
                    <td>
                        User:
                    </td>
                    <td>
                        <input type='text' name='j_username' value=''>
                    </td>
                </tr>
                <tr>
                    <td>
                        Password:
                    </td>
                    <td>
                        <input type='password' name='j_password' />
                    </td>
                </tr>
                <tr>
                    <td colspan='2'>
                        <input name="submit" type="submit" value="Login" />
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html></pre><br><br>

也就是说当表单提交的时候,action指向了"/j_spring_security_check"。好的, 再想一下我们的spring security文档。 他说如果遇到这样的请求url会指向UserPasswordAuthenticationFilte。那我们去看一下他的源码。

173209_iCQ6_1417419.jpg

我们可以猜到了 j_username j_password 和j_spring_security_check都是一些特定的拦截。 j_username主要拦截用户请求的用户名,而j_password主要拦截用户请求的密码.

spring security中也提供了部分的过滤器请求拦截(很可惜,我去查找spring security官方文档时,发现文档中没有提供一系列的列表),如下:

173402_YjnN_1417419.jpg

我们现在已经了解到了spring security是如何拦截用户请求的了。 归根结底还是过滤器啊。


转载于:https://my.oschina.net/heroShane/blog/196997

相关文章:

  • php.ini中文解释
  • ubuntu下gvim字体设置
  • 《JAVA面向对象的特征 》
  • MySQL安装后设置root 密码
  • 对《神奇的C语言》文中例子 5 代码的分析讨论
  • Mysqlbackup 3.9.0 企业级备份工具详解
  • I/O负载均衡策略之一 条带化
  • 疯狂ios讲义之实现游戏逻辑(3)
  • 常见开源协议GPL、Apache、CDDL、BSD等区别
  • 剑指 offer set 24 扑克牌的顺子
  • SCCM 2012 R2---安装客户端代理软件
  • Windows脚本初探之VBScrip流程控制If...Then...
  • 【Cocos2d-x for WP8 学习整理】(3)CCScrollView 实现捕鱼达人一样的场景选择界面...
  • ubuntu下安装oracle
  • Asp.net MVC
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • C++11: atomic 头文件
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Effective Java 笔记(一)
  • python大佬养成计划----difflib模块
  • React-redux的原理以及使用
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue2.0 实现互斥
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端之Sass/Scss实战笔记
  • 微信公众号开发小记——5.python微信红包
  • 微信小程序填坑清单
  • 小试R空间处理新库sf
  • 写给高年级小学生看的《Bash 指南》
  • 中文输入法与React文本输入框的问题与解决方案
  • $L^p$ 调和函数恒为零
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)常见O(n^2)排序算法解析
  • (3)STL算法之搜索
  • (补)B+树一些思想
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)Scala的“=”符号简介
  • (转)setTimeout 和 setInterval 的区别
  • (轉)JSON.stringify 语法实例讲解
  • (状压dp)uva 10817 Headmaster's Headache
  • .apk 成为历史!
  • .gitignore
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET正则基础之——正则委托
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [145] 二叉树的后序遍历 js
  • [AIGC 大数据基础]hive浅谈
  • [android学习笔记]学习jni编程
  • [C++打怪升级]--学习总目录
  • [C语言]——C语言常见概念(1)
  • [DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]
  • [HTML]Web前端开发技术6(HTML5、CSS3、JavaScript )DIV与SPAN,盒模型,Overflow——喵喵画网页
  • [java/jdbc]插入数据时获取自增长主键的值