springsecurity扩展自定义会话管理(二)提供管理员调用踢出用户
配置文件基本上和(一)比没有做什么修改,只是不限制用户用同一账号登陆,所以配置maximumSessions为-1
<beans:bean id="currentController"
class="org.springframework.security.concurrent.ConcurrentSessionControllerImpl">
<beans:property name="sessionRegistry" ref="sessionRegistry" />
<beans:property name="exceptionIfMaximumExceeded"
value="false" />
<beans:property name="maximumSessions" value="-1"/>
</beans:bean>
其实要实现列表当前登陆的用户,并踢出用户,就是调用springsecurity的
org.springframework.security.concurrent.SessionRegistryImpl
就可以满足要求了,当然,用这个类来做踢出用户的功能,不是很好,不过也懒得去动这个源码了,由于mini-web的示例是struts2的,所以我就简单的写了个Action去调用这个类来操作,如果要用到公司的项目中,那还要放到controller里面去才行,SessionAction.java:
package org.springside.examples.miniweb.web.user;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.config.ParentPackage;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import org.apache.struts2.dispatcher.ServletActionRedirectResult;
import org.springframework.security.concurrent.SessionInformation;
import org.springframework.security.concurrent.SessionRegistry;
import org.springside.modules.web.struts2.CRUDActionSupport;
import org.springside.modules.web.struts2.SimpleActionSupport;
@ParentPackage("default")
@Results( { @Result(name = CRUDActionSupport.RELOAD, value = "/session", type = ServletActionRedirectResult.class) })
public class SessionAction extends SimpleActionSupport {
private static final String RELOAD = "reload";
private static final long serialVersionUID = 8071034786218297672L;
private String loginId;
private SessionRegistry sessionRegistry;
List<String> loginIds;
//默认方法
public String execute() throws Exception {
return list();
}
//列表当前登录的用户的loginIds
public String list() throws Exception {
Object[] loginIds_obj = sessionRegistry.getAllPrincipals();
if (loginIds_obj != null && loginIds_obj.length > 0) {
loginIds = new ArrayList<String>(loginIds_obj.length);
for (int i = 0; i < loginIds_obj.length; i++) {
loginIds.add((String) loginIds_obj[i]);
}
}
return SUCCESS;
}
//根据传入的loginId,踢出某用户
public String destroy() throws Exception {
SessionInformation[] sessions_arrs = sessionRegistry.getAllSessions(
loginId, false);
if (sessions_arrs != null && sessions_arrs.length > 0) {
for (int i = 0; i < sessions_arrs.length; i++) {
sessions_arrs[i].expireNow();
// sessionRegistry.removeSessionInformation(sessions_arrs[i].getSessionId());
}
}
return RELOAD;
}
public String getLoginId() {
return loginId;
}
public void setLoginId(String loginId) {
this.loginId = loginId;
}
public List<String> getLoginIds() {
return loginIds;
}
public void setLoginIds(List<String> loginIds) {
this.loginIds = loginIds;
}
public void setSessionRegistry(SessionRegistry sessionRegistry) {
this.sessionRegistry = sessionRegistry;
}
}
分享到:
相关推荐
Spring Security 是一个强大的Java安全框架,它为Web应用程序提供了全面的安全解决方案。在Spring Security中,密码的加密是非常关键的一部分,因为这直接关系到用户数据的安全性。本示例将介绍如何在Spring ...
在Spring Security框架中,自定义过滤器是实现特定安全需求的一种常见方式。Spring Security的核心功能是通过一系列的Filter链来处理HTTP请求,这些Filter包括认证、授权等关键操作。本篇我们将深入探讨如何在Spring...
本文将详细探讨SpringSecurity中关于自定义用户权限信息存取的实现方法,包括如何通过配置文件和数据库来管理用户的认证信息和权限数据。 首先,当我们谈论用户权限信息的存取,实际上是在处理两个方面的问题:用户...
其次,Spring Security是Spring生态中的安全模块,它提供了一套全面的安全解决方案,包括认证、授权、会话管理等。开发者可以通过配置或编程的方式,利用Spring Security保护Web应用程序的各个层面,防止未授权访问...
Spring Security 是一个强大的安全框架,广泛用于Java Web应用的安全管理,包括身份验证、授权和访问控制。在Spring Boot中,Spring Security提供了开箱即用的功能,使得开发者可以快速地为应用添加安全特性。本资源...
# 基于Spring Boot和Spring Security的分布式会话管理系统 ## 项目简介 本项目是一个基于Spring Boot和Spring Security框架的分布式会话管理系统。它利用Redis集群来共享HTTP会话,支持单点登录(SSO)和资源...
- **Remember Me**:提供持久化的会话,使用户在一段时间内无需重新登录。 - **OAuth2支持**:集成了OAuth2协议,可用于第三方应用的授权。 - **国际化的错误处理**:提供自定义的错误页面和消息支持。 - **可...
springsecuritytest自定义权限成功实例.rar 每个类都有相应的详细的介绍,看懂不难,当前前提还是需要对Springsecurity有些了解,自定义权限拦截器;认证管理器;用户详细信息;资源访问管理;用户信息查询等类;
在Spring Security 4中,我们可以通过自定义过滤器来扩展其功能,以满足特定的安全需求。在这个小例子中,我们将探讨如何创建并集成自定义过滤器,以及它在Spring Security中的工作原理。 首先,我们需要理解Spring...
在企业级应用开发中,Spring Security作为Spring框架的一个子项目,提供了一套完整的权限管理和安全性解决方案。它不仅能够处理身份验证(authentication)和授权(authorization),还提供了对加密、CSRF保护、会话...
springsecurity(用spring ibatis freemaker)实现的用户自定义的权限管理页面, 里头包括数据库脚本 和原数据 和原代码 主要参考http://blog.csdn.net/k10509806/article/details/6369131 这个人的文章做的
在`SpringSecurity.md`和`SpringSecurity.pdf`文档中,可能包含SpringSecurity配置、自定义用户服务、授权策略等方面的代码示例。`codes`目录可能包含实际运行的项目代码,方便读者实践和理解。 8. **图笔记.draw...
在这个“springboot springsecurity动态权限控制”的主题中,我们将深入探讨如何在Spring Boot项目中集成Spring Security,实现动态权限控制,让菜单权限的管理更加灵活和高效。 首先,我们需要理解Spring Security...
会话管理:Spring Security支持对用户会话状态的管理,包括会话超时、并发控制、集群环境下的分布式会话管理等。 Web集成:Spring Security能够无缝集成到Spring框架和Spring MVC中,提供了过滤器、标签库等工具,...
Spring Security提供了一种基于票证的并发控制,如果发现用户有新的登录尝试,会强制旧会话注销。 5. **权限控制** - Spring Security通过访问决策管理器(Access Decision Manager)和权限访问决策策略(Voter)...
总之,这个"spring security 完整项目实例"涵盖了Spring Security的核心组件和用法,包括用户管理、身份验证、权限控制、会话管理等多个方面。通过学习和实践这个项目,开发者能够深入理解Spring Security的工作原理...
在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...
4. **会话管理(Session Management)**:Spring Security提供了强大的会话管理功能,可以限制同一用户同时在线的数量,检测会话劫持和会话固定攻击,并能实现会话超时策略。 5. **CSRF保护(Cross-Site Request ...
这篇"Spring Security进阶篇 V 自定义标签控制显示"的博客文章显然深入探讨了如何在Spring Security中实现自定义的安全控制,以便更好地管理和展示应用内容。在本文中,我们将详细解析这个主题,并与"JSP自定义标签...
4. **会话管理**:Spring Security提供了会话管理功能,如会话固定保护、会话超时和并发会话控制。这在防止会话劫持和会话固定攻击方面至关重要。 5. **CSRF(跨站请求伪造)防护**:Spring Security 3.1默认提供了...