细看spring security单点登陆源码的验证过程


分析得比较好的文章:

http://blog.csdn.net/java_mr_zheng/article/details/52385071    

https://www.cnblogs.com/drizzlewithwind/p/6196080.html







1.form表单请求被UsernamePasswordAuthenticationFilter拦截,先判断请求(请求必须是post请求)地址是否为/j_spring_security_check,如果不是,
则放行,进入下一个过滤器,是则进行校验。
UsernamePasswordAuthenticationFilter继承了AbstractAuthenticationProcessingFilter,form表单请求进来会被
父类的doFilter拦截,doFilter调用UsernamePasswordAuthenticationFilter中的attemptAuthentication方法。
可以用一个类来继承UsernamePasswordAuthenticationFilter,自然就可以继承或者重写父类方法doFilter和attemptAuthentication。
方法attemptAuthentication通过UsernamePasswordAuthenticationToken初始化一些参数(authorities,principal,credentials,authenticated(false)),
构造出一个构造未认证的UsernamePasswordAuthenticationToken
对象。




2.然后通过调用AuthenticationManager(AuthenticationManager的默认实现是ProviderManager)接口实现类ProviderManager的authenticate方法。
        AuthenticationManager说明:顾名思义就是认证管理器,把需要认证的东西分配下去
        管理使用什么AuthenticationProvider验证用户的合法性,AuthenticationManager默认实现类出除了实现方法authenticate还拥有2个自己重要的参数类:
        List<AuthenticationProvider> providers; AuthenticationProvider(接口,认证实现者)的集合,AuthenticationProvider接口如果没有指定默认DaoAuthenticationProvider实现。
        AuthenticationManager parent。


          AuthenticationProvider的作用:可以处理一个特定的Authentication,实现身份验证。它有2个方法
         Authentication authenticate(Authentication authentication) throws AuthenticationException;(根据authentication信息实现身份验证)
         boolean supports(Class<?> authentication); 用于判断该AnonymousAuthenticationProvider能够验证某种类型的Authentication。


         AuthenticationManager实现类的方法中会调用AuthenticationProvider实现类的authenticate来验证一个Authentication。
         如果该providers中如果有一个AuthenticationProvider的supports函数返回true,那么就会调用该AuthenticationProvider的authenticate函数认证,如果认证成功则整个认证过程结束。
         如果不成功,则继续使用下一个合适的AuthenticationProvider进行认证,只要有一个认证成功则为认证成功。


          默认方式中DaoAuthenticationProvider中会调用从父类AbstractUserDetailsAuthenticationProvider继承的authenticate方法方法来验证Authentication,
          authenticate方法中调用retrieveUser来调用UserDetailsService实现类中loadUserByUsername方法来获取一个loadedUser。我们可以定义一个类来实现UserDetailsService接口。
          随后调用check方法来检验账号状态,然后调用additionalAuthenticationChecks方法来进行密码验证,最后完成了单点登陆的简单验证。


         如果上述过程没有认证成功,且该ProviderManager的成员变量AuthenticationManager parent不为null,那么会使用该parent继续认证。一般不会用到该AuthenticationManager parent,稍微留意以下即可。


         随后回到最开始的doFilter中,如果成功则调用successfulAuthentication方法去调用SavedRequestAwareAuthenticationSuccessHandler方法onAuthenticationSuccess
        失败调用unsuccessfulAuthentication方法去调用onAuthenticationFailure方法去掉调用SimpleUrlAuthenticationFailureHandler中的onAuthenticationFailure。
        
        
说明:  Authentication(AnonymousAuthenticationToken,UsernamePasswordAuthenticationToken等实现类)可以拥有多种类型,
        不同的类型使用不同的AuthenticationProvider(DaoAuthenticationProvider,AnonymousAuthenticationProvider等实现类)。
        比如DaoAuthenticationProvider支持使用UsernamePasswordAuthenticationToken,AnonymousAuthenticationProvider支持AnonymousAuthenticationToken等。


       
        






       













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、源码特点 企业费用管理系统,有权限分配,登陆验证,新增角色,发布公告等   二、功能介绍 1、js的兼容性有个地方不行(比如模块排序,那个时候也是雏鸟一只,写了一小撮,现在用jq应该好处理的吧,ie里面没问题,大家发挥吧) 2、里面的菜单和对应菜单下面的目录项可以根据需求自己添加的,有对应模块 3、可以根据自己设定的角色添加对应的访问页面 4、有些操作涉及到按钮权限,对于这种思路,我粗粗的写了2个自定义控件,里面模块有demo使用细看即可,根据这个思路后面完善应该不难的哈。 5、关于分页新手也是很热乎这方面的,里面有2种分页样式,一个是这个后台框架本身设计配套,还有一个是我从淘宝客的后台偷下来的(用着蛮贴切的),样式表是css文件夹下的custompagebar.css;逻辑代码都写好了,自行绑定数据调用吧。   三、菜单功能 1、会员管理:添加会员;会员列表;配送地址管理;新增配送地址 2、页面管理:页面列表;添加文件 3、菜单管理:菜单列表;添加菜单 4、角色管理:角色列表;新增角色 5、系统用户:系统用户列表;新增系统用户 6、系统参数:参数列表;新增配置参数 7、新增会员;新增产品;发布公告等   四、注意事项 1、开发环境为Visual Studio 2010,数据库为SQLServer2008R2,使用.net 4.0开发。 2、管理员登陆名密码均为:51aspx 3、附加数据库连接字符串配置文件在web.config 4、DB_51aspx文件夹中是数据库文件,附加即可      相关阅读 同类推荐:企业网站源码
2012年美赛A题"细看树叶"是一个有趣的数学建模问题,要求通过观察树叶的形态与结构,探索其中可能存在的数学规律。 首先,要解决问题,我们需要收集树叶的数据。可以通过实地调查或者利用现有的图像识别技术获取树叶的外形、纹理、大小等信息。这些数据将用于进一步的分析和建模。 其次,我们可以将树叶的形态和结构进行数学描述。可以利用曲线和曲面拟合技术分析树叶的边缘曲线,根据关键点的坐标和曲线拟合方程,得到树叶的外形模型。同时,我们还可以通过计算树叶的面积、叶尖角度、叶条数量等指标,构建更加全面的数学模型。 在分析树叶的数学模型时,我们可以注意到一些规律或者模式。比如,我们可以探讨树叶表面的统计特征,如纹理或者花纹的规律性。在形态方面,我们可以关注树叶的对称性、分叉规律、排列方式等。这些规律可以通过数学工具,如分形几何、图论等进行描述和分析。 最后,我们还可以将分析的结果应用于实际问题中。例如,通过研究树叶的形态规律,可以进一步了解植物的生长与发育,甚至可以为农业提供一些栽培技巧。此外,树叶的形态也可以用于识别和分类植物,对于生物学研究和环境保护也具有一定的价值。 总之,"细看树叶"是一个有挑战性的数学建模问题,通过深入研究树叶的形态与结构,我们可以发现其中存在的数学规律,并将其应用于实际问题中。这也体现了数学建模在生命科学领域的应用潜力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值