- 浏览: 244299 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (281)
- hibernate (16)
- sql工具 (2)
- eclipse (15)
- tomcat (13)
- 项目部署 (4)
- java (62)
- spring (15)
- EL (1)
- javascript (8)
- 正则表达式 (1)
- jQuery (4)
- mysql (15)
- jstl (1)
- jsp (1)
- eclipse,eclipse插件 (1)
- svn (4)
- java,resin (1)
- jdbc (1)
- jdk (2)
- android (21)
- resin (3)
- php (3)
- 其他 (2)
- 数据库 (2)
- cas单点登录 (2)
- 邮箱激活 (1)
- jad (1)
- 支付 (1)
- struts (1)
- jpa (1)
- struts2 (4)
- json (3)
- oracle (2)
- velocity (1)
- sina微博登陆 (2)
- qq账户登录 (1)
- spring security (1)
- java图片处理 (1)
- http请求 (1)
- cas springsecurity (1)
- freemarker (1)
- cas (6)
- java oauth2 (2)
- oauth2.0 (6)
- springsecurity oauth2 (1)
- sms (1)
- springmvc (2)
- spring aop (1)
- luaeclipse (1)
- cocos2d (1)
- hibernate缓存 (1)
- ibatis (1)
- linux (7)
- 技术网站 (1)
- python (2)
- hadoop (1)
- war3 (0)
- elasticsearch (2)
- jboss (1)
- spring data jpa (2)
- java json (1)
- jsonp (1)
- webservice (4)
- java多线程 (1)
- java加密解密 (1)
- spring task (1)
- java session and cookie (1)
- java nio (1)
- 缓存 (1)
- java大数据 (1)
- cygwin (1)
- 设计模式 (1)
- mybatis (2)
- jquery插件 (2)
- jvm内存溢出 (1)
- drools (1)
- cookie and session (1)
- jvm内存设置 (1)
- nginx (1)
- 微信 (1)
- extjs (1)
- redis (7)
- memcached (1)
- js闭包 (1)
- js (0)
- mongodb (3)
- dubbo (2)
- jdk版本问题 (1)
- opnfire (1)
- git (1)
- jsp视频播放 (1)
- 国际化 (1)
- 后台管理 (1)
- yum (1)
- k (1)
- 算法 (0)
- jvm优化 (1)
- java检测 (1)
- maven操作 (0)
- ios打包 (1)
- 网络通信 (1)
- node.js (1)
- maven (4)
- 消息队列 (2)
- springcloud (6)
- mq (2)
- idea (3)
- log4j (1)
- docker (4)
- editplus (1)
- springboot (1)
- Kubernetes (1)
- jenkins (1)
- websocket (1)
- thirft (1)
- strom (1)
- postman (1)
- kafka (1)
- 线程池 (1)
- JVisualVM (1)
- java反射 (1)
- shell (1)
- java8 (2)
- i18 (1)
- jvm (0)
- nio (1)
- nodejs (1)
- idea java (1)
最新评论
-
pengfeifei26:
wbzhaohl 写道这个有解决方案没有时间长了,貌似有点忘了 ...
A redirect is required to get the users approval -
wbzhaohl:
这个有解决方案没有
A redirect is required to get the users approval -
somebody:
恩。好吧。这个只有在 还没发布的 2.0 版本才有。
oauth2.0设置自动授权
为了避免用户重复登录,系统在使用过程中用户可能需要保持登录。Spring提供了remember me的配置,在项目中我使用了基于cookie的保持登录功能。根据spring的安全文档,要实现remember me配置只要做以下几件事情:
1、登录页
<form action="${ctx}/j_spring_security_check" method="post">
<input type="text" class="standard-textfield" name="j_username" />
<input type="password" class="standard-textfield" name="j_password" />
<input type="checkbox" id="_spring_security_remember_me" /> 保持登录
</form>
[/html]
2、在spring-security.xml文件中需要加入:
其中的key是用于混淆加密串的,key也可以不设置。user-service-ref是用来指定具体使用的登录验证类。由于我们系统的用户认证是通过自己的业务逻辑实现的,此时就需要提供一个UserDetailsService 的一个实现类,这个类就是重载了loadUserByUsername的方法,根据我们内容的业务逻辑实现如下:
自己实现的UserDetailsService 也需要在spring-security.xml文件中加以声明:
2、
这样配置之后,每次用户进入系统后,一旦session过期,就会从cookie中获取用户信息,用户就永远保持登录。但如果仅仅这样配置,在后面使用过程中就会遇到新的问题,一旦用户点了logout,我们一般都会使用spring 的j_spring_security_logout则系统退出登录的时候就会删除本地的cookie,也就是说下次登录并不能记住用户,如果就实现到目前状态保持登录对用户来说没有任何意义!
这时候我们可以通过提供一个自己实现的SecurityContextLogoutHandler类,这个类继承了org.springframework.security.web.authentication.logout.LogoutHandler,实现了
这时候我们退出系统只是将当前用户的session设成无效,而不会去删除coookie,用户退出系统后再登录,spring就会在cookie中读取用户信息
3、
需要保持登录,用户每次进入登录页面,都应该默认显示登录用户的名字,用户应该只需要填写密码就能登录系统,这时候就需要action先从cookie中读取用户名后再返回给登录页显示即可;
4、
如果用户不想保持登录,在不勾选保持登录的时候需要将本地的cookie删除,目前找不到合适的获取勾选框值的方法,所以最后我决定在用户执行勾选框勾中或不勾中的时通过执行ajax实现cookie的删除
至此整个保持登录的功能就已经实现了,但还是有一些安全的隐患在里面,由于用户使用了保持登录功能,如果用户跳过登录页面,直接访问系统的一个有效链接,由于spring的安全机制决定其会从cookie中获取用户信息,所以系统可以有效访问,也就是只要用户没有清除cookie,那么用户在任何时间都可以无需登录访问系统。
1、登录页
<form action="${ctx}/j_spring_security_check" method="post">
<input type="text" class="standard-textfield" name="j_username" />
<input type="password" class="standard-textfield" name="j_password" />
<input type="checkbox" id="_spring_security_remember_me" /> 保持登录
</form>
[/html]
2、在spring-security.xml文件中需要加入:
<http> <remember-me user-service-ref="userDetailManager" key="e37f4b31-0c45-11dd-bd0b-0800200c9a66"/> </http>
其中的key是用于混淆加密串的,key也可以不设置。user-service-ref是用来指定具体使用的登录验证类。由于我们系统的用户认证是通过自己的业务逻辑实现的,此时就需要提供一个UserDetailsService 的一个实现类,这个类就是重载了loadUserByUsername的方法,根据我们内容的业务逻辑实现如下:
@Override public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException { UserInfoManager userInfoManager = ContextLoader.getCurrentWebApplicationContext().getBean(UserInfoManager.class); UserInfo user = userInfoManager.findUserInfo(userName); // 鍒ゆ柇鐢ㄦ埛鐨勮处鍙锋槸鍚﹁繃鏈? List<GrantedAuthority> authsList = new ArrayList<GrantedAuthority>(); authsList.add(new GrantedAuthorityImpl("ROLE_ADMIN")); if (user != null) { if (user.getEndDate() != null) { String endDate = OrganizationConstant.dateToString(user.getEndDate()); if (endDate.equals(OrganizationConstant.STRIBF_END_DATE)) { org.springframework.security.core.userdetails.User authUser = new org.springframework.security.core.userdetails.User(userName, user .getPassWord(), true, true, true, true, authsList.toArray(new GrantedAuthority[0])); return authUser; } else { throw new UsernameNotFoundException("娌℃湁杩欎釜鐢ㄦ埛"); } } else { throw new UsernameNotFoundException("娌℃湁杩欎釜鐢ㄦ埛"); } } else { throw new UsernameNotFoundException("娌℃湁杩欎釜鐢ㄦ埛"); } }
自己实现的UserDetailsService 也需要在spring-security.xml文件中加以声明:
<authentication-manager alias="authenticationManager"> <authentication-provider user-service-ref="userDetailManager"> <password-encoder hash="md5" base64="true"/> </authentication-provider> </authentication-manager> <beans:bean id="userDetailManager" class="cn.ac.sec.limulus.framework.main.service.UserDetailManager" />
2、
这样配置之后,每次用户进入系统后,一旦session过期,就会从cookie中获取用户信息,用户就永远保持登录。但如果仅仅这样配置,在后面使用过程中就会遇到新的问题,一旦用户点了logout,我们一般都会使用spring 的j_spring_security_logout则系统退出登录的时候就会删除本地的cookie,也就是说下次登录并不能记住用户,如果就实现到目前状态保持登录对用户来说没有任何意义!
这时候我们可以通过提供一个自己实现的SecurityContextLogoutHandler类,这个类继承了org.springframework.security.web.authentication.logout.LogoutHandler,实现了
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { Assert.notNull(request, "HttpServletRequest required"); if (this.invalidateHttpSession) { HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } } org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices service; SecurityContextHolder.clearContext(); }
这时候我们退出系统只是将当前用户的session设成无效,而不会去删除coookie,用户退出系统后再登录,spring就会在cookie中读取用户信息
3、
需要保持登录,用户每次进入登录页面,都应该默认显示登录用户的名字,用户应该只需要填写密码就能登录系统,这时候就需要action先从cookie中读取用户名后再返回给登录页显示即可;
4、
如果用户不想保持登录,在不勾选保持登录的时候需要将本地的cookie删除,目前找不到合适的获取勾选框值的方法,所以最后我决定在用户执行勾选框勾中或不勾中的时通过执行ajax实现cookie的删除
至此整个保持登录的功能就已经实现了,但还是有一些安全的隐患在里面,由于用户使用了保持登录功能,如果用户跳过登录页面,直接访问系统的一个有效链接,由于spring的安全机制决定其会从cookie中获取用户信息,所以系统可以有效访问,也就是只要用户没有清除cookie,那么用户在任何时间都可以无需登录访问系统。
发表评论
-
二叉树创建和遍历
2015-03-30 22:10 672package test; import java. ... -
solr使用
2015-03-08 12:31 0http://www.52menshao.com/conten ... -
cron表达式
2014-09-15 14:06 786<task:annotation-driven/> ... -
java 对xml进行sax解析
2014-04-25 14:28 801import java.util.ArrayList; ... -
关于算法
2014-03-31 18:48 392http://bbs.csdn.net/topics/3907 ... -
java js 插件
2014-03-27 16:08 335http://www.malot.fr/bootstrap-d ... -
关于java模式
2014-03-13 17:04 286http://gxl-ct001.iteye.com/blog ... -
关于秒杀
2014-02-25 18:47 0http://www.blogjava.net/dongbul ... -
json格式时间转java时间
2014-01-08 16:17 1049http://surongly.iteye.com/blog/ ... -
Java时间日期格式转换
2014-01-03 18:26 469http://blog.csdn.net/Miniyaner/ ... -
JAVA调用sms
2014-01-03 16:15 441http://sms.webchinese.cn/api.sh ... -
oauth2.0 accesstoken验证无效处理类
2013-12-24 19:20 1107org.springframework.security.oa ... -
oauth2.0设置自动授权
2013-12-24 19:12 1406将 oauth_client_details 库表中autoa ... -
刷新access_token 类
2013-12-24 18:52 652刷新access_token 类 先删除掉库里保存的记录,然 ... -
oauth2.0怎么验证accesstoken是否正确或合法
2013-12-24 18:05 2167验证access_token流程 OAuth2Authent ... -
怎么样判断accesstoken是否过期
2013-12-24 18:02 1801用code去换取token的时候,会返回三个参数:现在的acc ... -
Java模拟HTTP的Get和Post请求
2013-09-17 17:03 1095/** post * 调用httpClient ... -
通过url获取图片并保存至本地
2013-09-17 15:39 1185/** * 通过url获取图片并保存至本 ... -
css 控制字数,多出用...表示
2013-09-16 18:20 1245<html> <head> ... -
com/caucho/server/http/ResinServer
2013-09-12 18:33 1154java.lang.NoClassDefFoundError: ...
相关推荐
《Spring Security3》第四章第四部分主要探讨了Remember me服务的后台存储机制以及如何结合SSL(Secure Sockets Layer)来增强应用的安全性。这一部分的知识点涵盖了Spring Security中Remember me的功能,用户身份...
.rememberMe() .userDetailsService(myUserDetailServiceImpl) .tokenRepository(persistentTokenRepository()) .tokenValiditySeconds(60 * 60) .and() .authorizeRequests() .antMatchers(SecurityConst....
而Acegi Security的"rememberMe"服务就实现了这一功能,为用户提供便捷的登录体验。 在Acegi Security中,"Remember Me"功能主要通过RememberMeServices接口实现,该接口定义了处理Remember Me令牌的方法。通常,这...
9. **记住我功能(Remember Me)**: 用户可以选择记住登录状态,以便在下次访问时无需重新登录。Spring Security支持这种功能,通过`RememberMeServices`接口实现。 10. **自定义逻辑**: 如果默认的配置无法...
本文将深入探讨如何在Spring Security中配置和使用`rememberMe`自动登录,以及其背后的持久化令牌方案。 ### 一、`rememberMe`基础配置 在Spring Security中,启用`rememberMe`功能非常直观。首先,你需要在`...
.rememberMe().rememberMeServices(rememberMeServices()) .key("key") // 同上面的key .rememberMeParameter("remember-me") // 前端提交的参数名 .tokenRepository(persistentTokenRepository()) ....
"Spring Security 构建 REST 服务实现 RememberMe 记住我功能" Spring Security 是一个功能强大且灵活的安全框架,广泛应用于 Java Web 应用程序中。在本文中,我们将介绍如何使用 Spring Security 构建 REST 服务...
可以通过`rememberMe()`配置实现"记住我"功能,让用户的登录状态在一段时间内保持有效。 7. **异常处理** 默认情况下,Spring Security会返回403(禁止访问)和401(未授权)错误页面。可以自定义这些错误页面或...
3. **配置过程** - **security.xml**:配置文件,定义了Spring Security的核心组件和规则。 - **http元素**:配置安全的HTTP请求,包括URL过滤、访问控制等。 - **form-login元素**:配置表单登录,指定登录页面...
<remember-me/> <!-- 自定义过滤器 --> <!-- 自定义过滤器 --> <beans:bean id="myFilter" class="springSecurity.MyFilter"> <!-- 自定义访问决策管理器 --> ...
http.rememberMe().key("yourUniqueKey").tokenValiditySeconds(86400); // 一天有效期 ``` 通过以上步骤,你已经掌握了Spring Security的基本配置和使用。不过,Spring Security的功能远不止这些,它还包括CSRF...
- Spring Security提供了“Remember Me”服务,使用户在一段时间内无需重新登录。 - 配置`PersistentTokenBasedRememberMeServices`来持久化记住我状态。 7. **自定义登录页面** - 可以通过配置`form-login`元素...
3. **安全配置**: 在Spring Security或Acegi Security的配置中,你需要启用"rememberMe"服务,并指定RememberMe Services的实例以及相关的参数,如token有效期、key等。 4. **Web表单集成**: "记住我"选项需要集成...
此外,Spring Security还支持各种其他功能,如记住我(remember-me)服务、CSRF保护、自定义权限表达式等。你可以通过添加额外的元素和属性来启用和配置这些特性。 总的来说,Spring Security 3.2 提供了一个全面的...
- 记住我功能(rememberMe) 这些机制能够在auto-config='true'的情况下自动配置,以便快速实现安全控制。 #### 8. Spring Security原则 文档中提到,Spring Security采用就近原则进行权限验证,意味着用户访问...
05.Spring Security 登录表单配置细节 06.Spring Security 表单登录源码 07.Spring Security 中的 JSON 交互 08.Spring Security 授权 09.Spring Security 用户数据入库 10.Spring Security+Spring Data Jpa 11....
2. 配置Spring Security的XML或Java配置,包括安全拦截规则、LDAP设置和Remember-me配置。 3. 编写自定义的`LdapAuthoritiesPopulator`,以处理角色映射。 4. 测试认证和授权流程,确保用户能正确登录,并在下次访问...
在处理Spring Security的RememberMe功能时,你需要确保正确配置RememberMeServices,比如设置适当的token validity seconds(令牌有效期),并使用安全的密钥来签署RememberMe cookie。同时,还需要注意与数据库中的...
- 使用`http.formLogin()`来配置表单登录,并通过`http.rememberMe()`来启用Remember-Me功能。 - 配置Remember-Me时,需要提供Token的持久化方式,例如数据库连接和表结构。 4. **Cookie的安全性**: - Cookie应...
总的来说,Acegi Security通过其丰富的特性和高度可配置性,为开发者提供了处理用户认证和授权的强大工具,包括"rememberMe"和匿名登录功能。理解并熟练运用这些功能,可以有效地提高Web应用的安全性和用户体验。在...