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

来源:互联网 发布:数据库方面的工作 编辑:程序博客网 时间:2024/05/22 17:34
上次看到了关于认证管理的过程,其中还有很多迷糊的地方,比如说,请求是如何被拦截的。


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


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


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

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

[html] view plaincopy
  1. <http auto-config="true" >  
  2.         <intercept-url pattern"/*" access="ROLE_USER" />  
  3. </http >  
还记得auto-config吧、,他自动配置了form-login标签.. 那么form-login标签究竟是什么呢。 我们查一下spring security的帮助文档
<form-login>中默认的属性中login-page和login-processing-url.咱们先来看这两个属性


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


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


在这里我们只需要知道。当我有<form-login>这个标签的时候,会配置两个url拦截,如果没有登录的话,却要访问授权资源文件的话,会被拦截到登陆页面,这个登陆页面是系统自动进行匹配的、、而"/_spring_security_check"是拦截提交过来的数据用的、。。这样说可能会很枯燥、 
还记得刚开始我们提到的表单么。我们来看一下他的源码就应该知道大概的流程了、 

[html] view plaincopy
  1. <pre name="code" class="html"><html>  
  2.       
  3.     <head>  
  4.         <title>  
  5.             Login Page  
  6.         </title>  
  7.     </head>  
  8.       
  9.     <body onload='document.f.j_username.focus();'>  
  10.         <h3>  
  11.             Login with Username and Password  
  12.         </h3>  
  13.         <form name='f' action='/JBCPPets/j_spring_security_check' method='POST'>  
  14.             <table>  
  15.                 <tr>  
  16.                     <td>  
  17.                         User:  
  18.                     </td>  
  19.                     <td>  
  20.                         <input type='text' name='j_username' value=''>  
  21.                     </td>  
  22.                 </tr>  
  23.                 <tr>  
  24.                     <td>  
  25.                         Password:  
  26.                     </td>  
  27.                     <td>  
  28.                         <input type='password' name='j_password' />  
  29.                     </td>  
  30.                 </tr>  
  31.                 <tr>  
  32.                     <td colspan='2'>  
  33.                         <input name="submit" type="submit" value="Login" />  
  34.                     </td>  
  35.                 </tr>  
  36.             </table>  
  37.         </form>  
  38.     </body>  
  39.   
  40. </html></pre><br><br>  
呵呵。 也就是说当表单提交的时候,action指向了"/j_spring_security_check"..好的。 在想一下我们的spring security文档。 他说如果遇到这样的请求url会指向UserPasswordAuthenticationFilter..那我们去看一下他的源码.



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


呵呵、 觉得现在稍微清楚一点了。


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


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

0 0
原创粉丝点击