SpringSecurity3.0配置前后台登录
?
? ? 在此,谢谢http://blog.csdn.net/k10509806/article/details/6436987这篇文章的作者,我参考了其中Filter部分的内容,再次感谢!
?
? ? 先说两句没用的话,本想在CSDN上发表这篇文章了,谁曾想第一天开通博客,居然不让用,要等三天时间,要知道,对于程序员来说,时间宝贵,况且又有个什么密码泄漏事件,想来想去还是来iteye吧。
? ? 第一次在iteye上面写东西,不知道最终会是什么效果,期待中......?
?? ? 最近想在闲暇时间,写个CMS玩玩, 需要用到前后台页面登录和登出,因为使用SpringSecurity的时间也不长,相对来说对与这种需求还是有一点点复杂的,所以用了几个小时的研究,终于满足了这种需求。?其实原理很简单,就是重写实现类,根据访问的路径判断页面是前台还是后台,实现跳转到不同登录页面和登出成功页面。
?
? ?? 我用的环境是Spring3.0和SpringSecurity3.0,MyEclipse自动引包就行了。
?
? ? 需要注意的是,这里的大部分Java代码,请看springsecurity3的源码,我是在源码的基础之上,进行重构的,我所写的部分,大多都写有注释,对于spring源码,因为很忙,我也没有细看,不明白的,留言好了。
?
? ? ?先看一下配置的http节点。
?
?
? ?很简单,关键部分我用红色标明了,其中的loginUrlEntryPoint 是实现的AuthenticationEntryPoint接口,用来判断是前台登录还是后台登录,loginFilter 是继承的AbstractAuthenticationProcessingFilter类,实现登录验证的功能。
?
? ? 下面看?loginUrlEntryPoint 的说明。
? ? 配置如下:
?
? ?代码如下:
? ??package service;
?? ? 作一下简要解释,这里的validateUrl参数,是定义执行提交身份验证的URL,提供自定义,和登录页面的action对应即可。usernameParameter是登录页面的用户输入框的id,passwordParameter是密码输入框的id,重点是authenticationFailureHandler和authenticationSuccessHandler,分别是验证成功和失败。
?
? ? 先看一下loginFilter的代码:
?
?
?
? ? 两个属性分别是前台登录失败和后台登录失败的跳转url,我写的是到登录页面,通过error参数判断是验证失败。
?
? ? 下面看一下failureHandler的代码:
?
?
? ? ?这里的关键代码已经给了明确注释,很简单,容易理解。这一步骤能够实现登录失败分别跳转到前台、后台的失败页面。
? ? 再看一下successHandler的配置:
?
?
? ? 和failureHandler含义一样,不解释了。
?
? ? 下面再看一下successHandler的代码:
?
?这里通过构造注入,分别注入前后台登出成功的url和SecurityContextLogoutHandler,filterProcessesUrl的意思是执行登出的url,默认就是/j_spring_security_logout,不管是前台还是后台,只要执行filterProcessesUrl所对应的url,就会分别跳转到所配置的登出成功页面,下面看一下logoutFilter的代码部分:
?
?
?
? ? 这里也不解释了,真的没什么好说的,说多了都是废话。
?
? ? 可以看出来,几乎所有的代码都有一个共性,就是从session中取出loginType判断前后台,再根据这个值,将跳转地 ? ? ? 址赋值给springsecurity,最终实现了所给的需求。
? ? 写的有点混乱,对于写这种文章实在没什么经验,也是一种锻炼。
? ? 最后,希望这些能帮助到朋友们。
?
?
? ? 我的邮箱是:zhbf5156@163.com ,有问题,欢迎一起探讨。
?
?