Spring学习笔记13

接学习笔记12

2. 处理安全上下文(security context)

       HTTP是一个无状态协议,因此如果HTTP不能记住你的信息,你每次提交请求都需要登陆。基于Javaweb应用使用会话来保存来保存请求的数据。在Spring中,一个请求最先被传递给HttpSessionContextIntegrationFilter。这个filter负责读取用户的身份信息,配置方法如下:

<bean id=”httpSessionIntegrationFilter”

class=”org.acegisecurity.context.HttpSessionContextIntegrationFilter” />

当一个请求到来时,HttpSessionContextIntegrationFilter会检查会话中是否包含用户验证信息。如果包含,Spring就会在当前请求中使用该验证信息。请求结束后,HttpSessionContextIntegrationFilter会把认证信息放回到session中以备下次使用。

       如果HttpSessionContextIntegrationFilter在会话中找到了用户的验证信息,那么用户就不需要重新登录。如果没有找到,那么就需要配置一个身份验证filter,也就是下一个要讨论的filter——FilterChainProxy

3. 用户登录


身份验证工作需要一个验证入口点(authentication entry point)和一个验证处理filter。验证入口点提供登录界面,让用户输入用户名密码。验证处理filter负责对登录用户进行身份验证。Spring提供了5<入口点,fliter>。先从最常用的说起:BasicProcessingFilterEntryPointBasicProcessingFilter

·基本认证方式:基于web的认证方式。它向浏览器发送HTTP401(未授权)响应。浏览器收到响应后弹出对话框提示用户输入用户名密码。用户登录之后,浏览器向服务器发送消息开始进行身份认证。如果成功,定向到指定的URL;反之服务器再次发送HTTP401响应表明重新登录。Spring中配置BasicProcessingFilterPoint方法如下:

<bean id=”authenticationEntryPoint”

       class=”org.acegisecurity.ui.basicauth. BasicProcessingFilterPoint”>

       <property name=”realmName” value=”RoadRantz” />

</bean>

realmName属性可以是任意字符串,通常都是一些登录提示信息。用户点击OK按钮之后,用户名密码信息封装在HTTP头部一同被送至服务器端。这时,BasicProcessingFilter将其取出并处理:

<bean id=”authenticationProcessingFilter”

       class=”org.acegisecurity.ui.basicauth. BasicProcessingFilter”>

       <property name=”authenticationManager” ref=”authenticationManager”/>

       <property name=”authenticationEntryPoint

              ref=”authenticationEntryPoint” />

</bean>

BasicProcessingFilter把用户名密码封装在HTTP头部并把它们发送给认证管理器。如果成功,一个Authentication对象放入会话以便未来使用;如果失败,控制权交给一个验证入口点供用户再次登录。

       基本认证方式有一些缺点:浏览器提供的登录对话框不能满足各种应用的要求。因此你就需要使用AuthenticationProcessingFilterEntryPoint

·基于表格的验证

AuthenticationProcessingFilterEntryPoint提供用户一个基于HTML的登录表格。对于RoadRantz应用来说,配置如下:

<bean id=”authenticationEntryPoint”

 class=”….AuthenticationProcessingFilterEntryPoint”/>

       <property name=”loginFormUrl” value=”/login.htm” />

       <property name=”forceHttps” value=”true” />

</bean>

loginFormUrl属性设置成一个URL,该URL会显示在登录页面上。forceHttps属性设置为true表明登录页面使用采用sslhttp,即使最初的请求没有采用ssl

       这里loginFormUrl设置为/login.htm,它和SpringMVC

UrlFilenameViewController关联。但是,无论登录页面如何显示,其HTML代码都包含下面的内容:

<form method=”POST” action=”j_acegi_security_check”>

<b>Username: </b><input type=”text” name=”j_username”><br>

<b>Password: </b><input type=”password” name=”j_password”><br>

</form>

AuthenticationProcessingFilter会用到属性action,输入框j_usernamej_password。其配置方法如下:

<bean id=”authenticationProcessingFilter”

       class=”….AuthenticationProcessingFilter”>

       <property name=”filterProcessfingUrl” value=”/j_acegi_security_check” />

       <property

name=”authenticationFailureUrl” value=”/login.htm?login_error=1”/>

       <property name=”defaultTargetUrl” value=”/” />

       <property name=”authenticationManager” ref=”authenticationManager”/>

</bean>

filterProcessesUrl属性表明了要被解析的URL地址,默认值是/j_acegi_security_check,但你也可以自行修改其值。authenticationFailureUrl属性设置了当认证失败时被定向到的页面。

       通常情况下,如果认证成功,AuthenticationProcessingFilter会将一个Authentication对象放入session中并且重定向到用户指定的页面。defaultTargetUrl属性指定了当目标URL不可达时的默认定向页面。authenticationManager属性声明了一个authenticationManager bean。和其他认证处理filter一样,AuthenticationProcessingFilter也依赖于认证管理器的帮助。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值