哪位大神做过spring security 教程防止用户重复登录的例子啊

扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
spring security 配置禁止用户重复登录不能实现该如何处理
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口输入您需解决的
软件开发问题并开始搜索,
IT异常查询网可以方便地提供各类
程序错误解决方案。
spring security 配置禁止用户重复登录,不能实现。该如何处理 - J2EE
&&&发布于: 21:54:54&&&
spring security 配置禁止用户重复登录,不能实现。& spring & security & 2.0.5 &
& web.xml配置:
&listener&
&listener-class& org.springframework.security.ui.session.HttpSessionEventPublisher &/listener-class&
&/listener&
& spring-security.xml配置
&ss:concurrent-session-control & exception-if-maximum-exceeded= &false & & max-sessions= &1 & & session-registry-alias= &sessionRegistry & & expired-url= &/login.jsp?error=3 &/&
&bean & id= &sessionRegistry & & class= &org.springframework.security.concurrent.SessionRegistryImpl &/&
配置就是这两个,为什么同一个帐号还是可能重复登录很多此呢?是哪里的问题,麻烦高手们指点迷津。
& 是不是配置有问题,该怎么改。------解决的方法--------------------------------------------------------exception-if-maximum-exceeded= &false & 应该是默认让前一个用户的session失效,后一个用户还是能正常登录的.设置成true后,重复登录后才能抛出异常吧.LZ可以试试改下这个属性.
------解决的方法--------------------------------------------------------&!-- 登录验证器 --& &beans:bean id=&loginFilter&
class=&com.mylifes.security.spring.MyUsernamePasswordAuthenticationFilter&&
&!-- 处理登录 --&
&beans:property name=&filterProcessesUrl& value=&/j_spring_security_login& /&
&beans:property name=&authenticationSuccessHandler&
ref=&loginLogAuthenticationSuccessHandler& /&
&beans:property name=&authenticationFailureHandler&
ref=&simpleUrlAuthenticationFailureHandler& /&
&!-- 把配置好的session管理器放到登陆里 --&
&beans:property name=&authenticationManager& ref=&myAuthenticationManager& /&
&beans:property name=&usersSecurityDao& ref=&usersSecurityDao& /&
&beans:property name=&sessionAuthenticationStrategy&
ref=&sas& /&
&beans:property name=&rememberMeServices& ref=&rememberMeServices& /& &/beans:bean&红色的是重点
相关解决方法
你也许会喜欢
Web前端&&热门解决方法
Web前端&&最新解决方法
Web前端&&随机解决方法
诚心交换友情链接:qq:spring security3中,系统自身User(实现UserDetails),无法解决同一用户多次登录问题解决方案
spring security3中,系统自身User(实现UserDetails),无法解决同一用户多次登录问题解决方案
最近在整合s2s3h3+ss,这个过程真的很艰苦啊,可是乐趣也尽在其中。整合后发现利用系统自身的User(实现UserDetails),无法进行同一用户多次登录限制问题,反而spring security3中的自身的User,却可以限制,不知为何,后来也是上网查了一下和参考了spring security3的源码,之后终于是搞定了(下一步就是进行多登陆页面问题的处理了),解决方案:在自身的User对象中重写equal、hashCode的方法,希望对朋友们有帮助,重写代码如下:package com.ipi.tyr.module.userModule.import java.util.ArrayLimport java.util.Cimport java.util.Limport org.springframework.security.core.GrantedAimport org.springframework.security.core.authority.GrantedAuthorityIimport org.springframework.security.core.userdetails.UserDimport com.ipi.tyr.module.roleModule.bo.Rimport base.bean.BaseB/**?* User entity. @author MyEclipse Persistence Tools?*/public class User extends BaseBean implements UserDetails{??// Fields?private I?private S?private S private I?private S?private List&Role& ?// Constructors?/** default constructor */?public User() {?}?/** full constructor */?public User(String username, String password, Integer status, String descr) { this.username = this.password = this.status = this.descr =?}
// Property accessors?public Integer getId() {?}?public void setId(Integer id) { this.id =?}?public String getUsername() {?}?public void setUsername(String username) { this.username =?}?public String getPassword() {?}?public void setPassword(String password) { this.password =?}?public Integer getStatus() {?}?public void setStatus(Integer status) { this.status =?}?public String getDescr() {?}?public void setDescr(String descr) { this.descr =?}?public List&Role& getRoles() {?}?public void setRoles(List&Role& roles) { this.roles =?}?// Methods
public Collection&GrantedAuthority& getAuthorities() { // TODO Auto-generated method stub List&GrantedAuthority& list=new ArrayList&GrantedAuthority&(); for (Role role : roles) { list.add(new GrantedAuthorityImpl(role.getName())); } }
public boolean equals(Object rhs) { if (!(rhs instanceof User) || (rhs == null)) { } User user = (User) if (roles.equals(user.roles)) { } return (this.getPassword().equals(user.getPassword()) && this.getUsername().equals(user.getUsername()) && (this.isAccountNonExpired() == user.isAccountNonExpired()) && (this.isAccountNonLocked() == user.isAccountNonLocked()) && (this.isCredentialsNonExpired() == user.isCredentialsNonExpired()) && (this.isEnabled() == user.isEnabled())); } public int hashCode() {
int code = 9792; for (GrantedAuthority authority : getAuthorities()) { code = code * (authority.hashCode() % 7); } if (this.getPassword() != null) { code = code * (this.getPassword().hashCode() % 7); } if (this.getUsername() != null) { code = code * (this.getUsername().hashCode() % 7); } if (this.isAccountNonExpired()) { code = code * -2; } if (this.isAccountNonLocked()) { code = code * -3; } if (this.isCredentialsNonExpired()) { code = code * -5; } if (this.isEnabled()) { code = code * -7; } }?public boolean isAccountNonExpired() { // TODO Auto-generated method stub?}?public boolean isAccountNonLocked() { // TODO Auto-generated method stub?}?public boolean isCredentialsNonExpired() { // TODO Auto-generated method stub?}?public boolean isEnabled() { // TODO Auto-generated method stub return this.status==0?false:?}?}
//以下是XML的开头,
2.0开头必须有以后内容直接复制就可以
&?xml version=1.0 encoding=UTF-8 ?& &!DOCTYPE
-//Apache Software Foundation//DTD
在FORM表单中含有时间项的时候,当填写正确的时间项时候不会出现任何异常,当然时间格式错误的时候也会报错,当表单中未填写时间选项的时候会出现下面的异常:
1、非侵入的轻量级框架
spring是一个轻量级框架,spring是非侵入的,spring应用中的对象不依赖于spring特定类,spring提供的功能是独立模块化的,你可以单独使用一个模块,也可以几个模块
超长字符串 用clob类型添加到数据库
项目中需要用到Clob,自己以前虽然对此有些了解,但并没有写过代码.而Google的结果很多却没什么和自己的项目比较相近的.算了自己搞吧.
工程中使用S
一、悲观锁
悲观锁的实现,通常依赖于数据库机制,在整个过程中将数据锁定,其它任何用户都不能读取或修改,并发性不好。
实现方法:
在调用session的load方法时,作为参数传进去
常使用web服务器的朋友大都了解,一般的web server有两部分日志:
??? 一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息
??? 二是访问日志信息,它记录的访问的时间,
/luodaijun/blog/item/5bbe4cfb5ffefa1.html
摘自: /xhz12345/blog/item/ed9.html
1要求Action类要扩展自一个抽象基类。
1的一个共有的问题是面向抽象类编程而不
测试工具:Java开源项目StrutsTestCase StrutsTestCase是JunitTestCase类的扩展,提供基于
框架的代码测试。StrutsTestCase同时提供Mock对象方法和Cactus方法用来实际运行StrutsActio
在数据库里,进行增加、修改、删除记录的时候,经常会涉及到父子关系的表。
例如:有省份表和城市表,其中城市表有一个外键province_id引用到省份表的主键。这样,可以把省份表看成是父表,把
Powered by
[ RssXN(build:
070517 Asp.net 2.0)]
每隔1小时自动更新一次人气:2149757
访问用户量:3120
笔记经验:3830
总积分:261644
级别:VIP5
搜索本笔记
ta的交流分类
ta的全部笔记
浏览(7628)|(0)
&&交流分类:|笔记分类:
第三章&&&增强用户体验
在本章中,我们将对JBCP Pets在线商店增加一些功能,这些新功能能够为用户提供更愉悦和可用的用户体验,同时提供一些对安全系统很重要的功能。
在本章中,我们将要:
& &按照你的意愿自定义登录和退出页面,并将它们与标准的Spring web MVC的控制器相关联;
& &使用remember me功能为用户提供便利,并理解其背后的安全含义;
& &构建用户账号管理功能,包括修改密码以及密码遗忘找回功能。
自定义登录页
你可能还记得在前一章中,我们使用了Spring Security的security命名空间的基本配置功能。这为我们提供了基本的登录、认证和授权功能,但是这肯定没有到达产品质量的要求。在我们向老板汇报进度前,要添加的一个很重要的增强功能就是使得登录界面在展现和行为上与我们在线应用的其他地方保持一致。
回忆一下现在的登录界面大致如下所示:
自动配置并没有为我们提供很多其他的功能,如为登录页面添加样式。我们要为站点增加以下的功能:
& & 拥有页头、页脚以及与JBCP Pets样式一致的登录页;
& & 允许用户退出的链接
& & 允许用户修改密码的页面。
登录和退出的流程应该如下图所示:
我们将会通过一系列的练习来开发完善这个站点的结构。当开发登录和退出功能时,我们将会讲解所做的内容,所以当我们需要扩展站点的基本功能时,能够对于我们构建的内容有一个清晰的理解。
实现自定义的登录页
首先,我们需要一个集成于我们系统的登录页来替代默认的Spring Security登录页。需要的登录流程如下图所示:
实现登录的controller
我们需要添加一个Spring MVC的控制器来实现登录功能,以及以后的退出功能。JBCP Pets站点使用Spring MVC基于注解的机制来实现控制器与站点路径和资源的配置。让我们在包下com.packtpub.springsecurity.web.controller创建一个名为LoginLogoutController的controller,并包含以下的内容:
java代码:
// imports omitted
@Controller
public class LoginLogoutController extends BaseController{
@RequestMapping(method=RequestMethod.GET,value=&/login.do&)
public void home() {
可以看到,我们添加了一个非常简单的controller,并将其唯一的方法匹配至/login.do这个URL地址。这是我们编写简单的自定义登录页所要做的全部事情,这将替代Spring Security基本配置中为我们添加的登录页。BaseController基类在第二章:Spring Security起步的代码中已经添加,它提供了一个便利的地方我们可以添加应用中所有controller都能用到的方法。
添加登录JSP
/login.do引用将会导致我们在WEB-INF/dogstore-servlet.xml配置的Spring MVC view resolver去/WEB-INF/views目录下寻找名为login.jsp的JSP文件。让我们添加一个包含登录form的简单JSP,它将被Spring Security识别和使用。在第二章中我们已经学到,为了保证接下来的行为能够被正确的执行,登录的form中有两个重要的元素必须要被正确的设置:
& & Form action必须与UsernamePasswordAuthenticationFilter过滤器的action的配置相一致。默认的form action是j_spring_security_check;
& & 用户名和密码的表单域要与servlet的标准相一致。默认j_username和j_password是文本域的名字。
我们同时会在这个JSP中包含站点的页头和页脚(本章的示例代码中添加了这部分,但是在本书的内容中没有进行罗列,因为它们在这里并不是阐述的重点所在)。这些完成后,得到一个简单的JSP:
java代码:
&%@ page language=&java& contentType=&text/ charset=ISO-8859-1&
pageEncoding=&ISO-8859-1&%&
&jsp:include page=&common/header.jsp&&
&jsp:param name=&pageTitle& value=&Login&/&
&/jsp:include&
&h1&Please Log In to Your Account&/h1&
Please use the form below to log in to your account.
&form action=&j_spring_security_check& method=&post&&
&label for=&j_username&&Login&/label&:
&input id=&j_username& name=&j_username& size=&20& maxlength=&50&
type=&text&/&
&label for=&j_password&&Password&/label&:
&input id=&j_password& name=&j_password& size=&20& maxlength=&50&
type=&password&/&
&input type=&submit& value=&Login&/&
&jsp:include page=&common/footer.jsp&/&
需要注意的是,必须使用post方式的form提交,否则UsernamePasswordAuthenticationFilter会拒绝登录请求。
最后,我们还需要Spring Security的自动配置来引用我们新的登录页面。如果你在此时迫不及待想看一下效果的话,我们实际上只是为应用增加了一个新的工作页面。按照上面的流程并输入以下的地址,看看发生了什么。
什么?你是否发现你的请求首先被Spring Security拦截了(被重定向到spring_security_login)并且能够看见那个登录的form?这是因为Spring Security依旧指向了DefaultLoginPageGeneratingFilter生成的默认登录页。一旦你通过了这个过滤器生成的默认登录页,你才能够看到新的自定义登录页。最后一步就是要移除默认页并使用我们的登录form作为登录页。
配置Spring Security以使用我们的Spring MVC登录页
按照第一感觉,貌似我们只需要配置Spring Security的配置文件中的&form-login&元素并添加login-page命令,大致如下所示:
java代码:
&http auto-config=&true& use-expressions=&true&&
&intercept-url pattern=&/*& access=&hasRole('ROLE_USER')&/&
&form-login login-page=&/login.do& /&
现在,启动应用并输入首页地址(http://localhost:8080/JBCPPets/home.do)。如果你使用的IE浏览器,你会发现页面根本没有渲染,但是页面的似乎在不停的加载。让我们切换到Mozilla Firefox并访问同样的地址。在Firefox下,你能够看到更多的信息,如下所示:
产生这样的问题是因为我们的URL拦截规则:
java代码:
&intercept-url pattern=&/*& access=&hasRole('ROLE_USER')&/&
这将要求访问所有匹配/*的URL(这将匹配应用的所有页面,包括我们新的登录页)都需要拥有ROLE_USER角色。下面的图展现了发生了什么事情:
(其实上面发生了反复请求登录页的情况,死循环了——译者注)
我们需要修改认证规则来允许匿名用户能够访问登录页。
【对于所有给定的URL请求,Spring Security按照自顶向下的顺序评估认证规则。第一个匹配URL模式的规则将会被使用。这意味着你的授权规则将要按照最特殊的到最不特殊的规则来进行排列。这在
开发复杂的规则集合时将会非常重要,因为开发人员经常会感到迷惑,因为他们有时会搞不清到底哪个规则会生效。记住自顶向下顺序,你将能够很容易地在任何场景下找到正确的对应规则。】
因为我们是要添加一个更特殊的规则,所以我们需要将其添加在列表的顶部。我们最终会得到如下的规则设置:
java代码:
&intercept-url pattern=&/login.do& access=&permitAll&/&
&intercept-url pattern=&/*& access=&hasRole('ROLE_USER')&/&
这将能够达到我们想要的效果:允许任何用户访问登录页而限制站点的其他部分只能是认证用户才能访问。到此为止,已经完成了登录功能。让我们看一下要添加退出功能都需要做些什么。
感谢 &iteye &&。
他的博客地址:
他的新浪微博:
本书源代码的地址:
相关笔记推荐
精品视频课程推荐
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制
课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力
技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......
系统、完整的学习Spring Web MVC开发的知识。包括:Spring Web MVC入门;理解DispatcherServlet;注解式控制器开发详解;数据类型转换;数据格式化;数据验证; 拦截器;对Ajax的支持;文件上传下载;表单标签等内容;最后以一个综合的CRUD带翻页的应用示例来综合所学的知识
内容概述:本课程专注于构建:高可扩展性、高性能、大数据量、高并发、分布式的系统架构。
从零开始、全面系统、成体系的软件架构课程,循序渐进的讲述构建上述系统架构所需要的各种技术知识和技能。
技术要点:
1:构建基本的业务功能块,基于Maven+Git+Spring mvc+spring+mybatis+ehcache+mysql+X-gen代码生成
&2:高扩展性的分布式体系架构(基于Nginx+Varnish+Memcache+ActiveMQ)
&3:NoSQL的合理使用和架构优化(基于MongoDB)
&4:分布式文件存储和架构优化(基于MogileFS)
深入浅出的讲解JavaBen的写法、JavaBean的用法、JavaBean的实现机制、JavaBean对应翻译的代码理解。
达到能综合使用Struts2+Spring3+Hibernate3+Jbpm4来进行实际项目开发的能力。
包括:ssh和jbpm的整合;数据字典;通用DAO(Spring+Hibernate+泛型+反射+SpEL+模板方法模式);自动生成UUID的加强版;分层开发、SSH联合的基本开发;翻页的示范真实值和表现值,数据参照的实现;文件上传下载;主子表操;登录验证码;登录控制的拦截器
浏览(7628)|(0)
&&交流分类:|笔记分类:
版权所有 Copyright(C) 私塾在线学习网SpringSecurity用户验证登录有关问题
&来源:读书人网&【读书人网():综合教育门户网站】
SpringSecurity用户验证登录问题系统用的是SpringSecurity来做的用户验证和授权,现在的有一个需求,是从其
SpringSecurity用户验证登录问题系统用的是SpringSecurity来做的用户验证和授权,现在的有一个需求,是从其他系统登录后,点击链接来进入我们系统,他们只给一个用户名,要我们实现用户登录并有权限访问我们系统。本人对SpringSecurity不太熟悉,没有思路,求各路大神相助。
SpringSecurity
[解决办法]我感觉还是&cas&单点登录设计下吧[解决办法]用cas吧。[解决办法]--------他们只给一个用户名,要我们实现用户登录并有权限访问我们系统任意用户名??,,那可以这样,在验证是否登录的地方,首先获取跳转过来的ip如果是你说的“他们”系统的ip,如果是&允许访问,&如果不是&拒绝访问。。。还是把这个用户名放入session吧,不然到时候获取当前用户信息的时候直接空引用了。。。[解决办法]引用:Quote: 引用:Quote: 引用:Quote: 引用:Quote: 引用:Quote: 引用:单点登录应该和SpringSecurity没关系吧你有什么想法吗?或者是你的系统只需要用户名就可以了,不需要密码?不是,是他们不提供密码,我们系统本身登录是需要密码的,但是如果是从他们系统登录过来,就不需要二次验证密码,所以只需要验证用户名就可以。那另一边系统里面的用户名与你这边系统里面是否有对应的用户?如果有对应的用户。你可以实现UserDetailsService接口,来处理登录,spring-security的配置文件也做修改,不要使用默认的配置。&实现UserDetailsService接口后,并重写loadUserByUsername方法。&loadUserByUsername方法需要返回一个UserDetails&对象,你可以先从你的系统里面根据用户名查找用户,如果用户存在,就创建一个User用户,设置好用户名,与权限,并将它的密码设置为""空字符串,然后返回。你说的我已经试过了,但是如果把密码设置为空,spring-security好像验证不通过,不知道你试过没有。我没有这样试过,你可以导入源码后调试&跟踪到源码里面看看,看他是怎么来处理的&&看能不能做些扩展。&如果密码为空字符串不行或者你可以先定义一个Servlet&,&该Servlet来接受另外网站跳转过来的请求,然后在Request中加入一个password,比如说value=aaa&然后从该Servlet跳转(Foward)到你的登录入口&。&还是按照9楼的方法,但是密码不要是空字符串,而是aaa&。就是说用一个Servelt来代理其他网站的登录请求,并在该Servlet为其他网站的请求加入一个默认的密码。&然后再将请求Foward到SpringSecurity的登录入口[解决办法]精神支持一下![解决办法]进入过滤器的时候,对特定工号加个默认密码,后续的不就一样处理了[解决办法]从他们的网址上解析用户名不就可以确保用户是从他们网站上连接过来的么。}

我要回帖

更多关于 spring security 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信