package sample.
auth;
import java.
util.
Arrays;
import java.
util.
Collection;
import java.
util.
Collections;
import java.
util.
HashSet;
import java.
util.
Iterator;
import java.
util.
List;
import java.
util.
Set;
import javax.
servlet.
jsp.
JspException;
import javax.
servlet.
jsp.
tagext.
Tag;
import javax.
servlet.
jsp.
tagext.
TagSupport;
import org.
acegisecurity.
Authentication;
import org.
acegisecurity.
GrantedAuthority;
import org.
acegisecurity.
context.
SecurityContextHolder;
import org.
springframework.
util.
StringUtils;
import org.
springframework.
web.
util.
ExpressionEvaluationUtils;
import sample.
web.
action.
AppContext;
/**
*
* @author limq
*
*/ public class AuthorizeActionTag
extends TagSupport
{ private String ifAllGranted = "";
private String ifAnyGranted = "";
private String ifNotGranted = "";
public void setIfAllGranted
(String ifAllGranted
) throws JspException
{ this.
ifAllGranted = ifAllGranted;
} public String getIfAllGranted
() { return ifAllGranted;
} public void setIfAnyGranted
(String ifAnyGranted
) throws JspException
{ this.
ifAnyGranted = ifAnyGranted;
} public String getIfAnyGranted
() { return ifAnyGranted;
} public void setIfNotGranted
(String ifNotGranted
) throws JspException
{ this.
ifNotGranted = ifNotGranted;
} public String getIfNotGranted
() { return ifNotGranted;
} public int doStartTag
() throws JspException
{ if (((null == ifAllGranted
) || "".
equals(ifAllGranted
)) &&
((null == ifAnyGranted
) || "".
equals(ifAnyGranted
)) &&
((null == ifNotGranted
) || "".
equals(ifNotGranted
))) { return Tag.
SKIP_BODY;
} final Collection granted = getPrincipalFunctionByAuthorities
();
final String evaledIfNotGranted = ExpressionEvaluationUtils
.
evaluateString("ifNotGranted", ifNotGranted, pageContext
);
if ((null != evaledIfNotGranted
) && !"".
equals(evaledIfNotGranted
)) { Set grantedCopy = retainAll
(granted,
parseSecurityString
(evaledIfNotGranted
));
if (!grantedCopy.
isEmpty()) { return Tag.
SKIP_BODY;
} } final String evaledIfAllGranted = ExpressionEvaluationUtils
.
evaluateString("ifAllGranted", ifAllGranted, pageContext
);
if ((null != evaledIfAllGranted
) && !"".
equals(evaledIfAllGranted
)) { if (!granted.
containsAll(parseSecurityString
(evaledIfAllGranted
))) { return Tag.
SKIP_BODY;
} } final String evaledIfAnyGranted = ExpressionEvaluationUtils
.
evaluateString("ifAnyGranted", ifAnyGranted, pageContext
);
if ((null != evaledIfAnyGranted
) && !"".
equals(evaledIfAnyGranted
)) { Set grantedCopy = retainAll
(granted,
parseSecurityString
(evaledIfAnyGranted
));
if (grantedCopy.
isEmpty()) { return Tag.
SKIP_BODY;
} } return Tag.
EVAL_BODY_INCLUDE;
} /**
* 得到用户的Authentication,并且从Authentication中获得 Authorities,进而得到 授予用户的 Function
* @return
*/ private Collection getPrincipalFunctionByAuthorities
() { Authentication currentUser = SecurityContextHolder.
getContext() .
getAuthentication();
if (null == currentUser
) { return Collections.
EMPTY_LIST;
} if ((null == currentUser.
getAuthorities()) ||
(currentUser.
getAuthorities().
length <
1)) { return Collections.
EMPTY_LIST;
} // currentUser.getAuthorities() 返回的是 GrantedAuthority[] List granted =
Arrays.
asList(currentUser.
getAuthorities());
AuthDao authDao =
(AuthDao
) AppContext.
getInstance().
getAppContext().
getBean("authDao"
);
Collection grantedFunctions = authDao.
getFunctionsByRoles(granted
);
return grantedFunctions;
} /**
* 得到用户功能(Function)的集合,并且验证是否合法
* @param c Collection 类型
* @return Set类型
*/ private Set SecurityObjectToFunctions
(Collection c
) { Set target =
new HashSet();
for (Iterator iterator = c.
iterator(); iterator.
hasNext();
) { GrantedFunction function =
(GrantedFunction
) iterator.
next();
if (null == function.
getFunction()) { throw
new IllegalArgumentException( "Cannot process GrantedFunction objects which
return null from getFunction
() - attempting to process "
+ function.
toString());
} target.
add(function.
getFunction());
} return target;
} /**
* 处理页面标志属性 ,用' ,'区分
*/ private Set parseSecurityString
(String functionsString
) { final Set requiredFunctions =
new HashSet();
final String[] functions = StringUtils
.
commaDelimitedListToStringArray(functionsString
);
for (int i =
0; i < functions.
length; i++
) { String authority = functions
[i
];
// Remove the role's whitespace characters without depending on JDK 1.4+ // Includes space, tab, new line, carriage return and form feed. String function = StringUtils.
replace(authority, " ", ""
);
function = StringUtils.
replace(function, "\t", ""
);
function = StringUtils.
replace(function, "\r", ""
);
function = StringUtils.
replace(function, "\n", ""
);
function = StringUtils.
replace(function, "\f", ""
);
requiredFunctions.
add(new GrantedFunctionImpl
(function
));
} return requiredFunctions;
} /**
* 获得用户所拥有的Function 和 要求的 Function 的交集
*
分享到:
相关推荐
### acegi+SSH动态实现基于角色的权限管理 在企业级应用开发中,权限管理和用户认证是必不可少的安全机制。本文将详细介绍如何利用Acegi安全框架(现称为Spring Security)结合SSH(Struts + Spring + Hibernate)...
本主题将深入探讨如何使用Acegi安全框架和Hibernate ORM工具动态实现基于角色的权限管理。Acegi(现已被Spring Security替代)是一个用于Java平台的安全框架,而Hibernate则是一个流行的关系型数据库持久化解决方案...
Acegi(现已被Spring Security替代)是一个强大的安全框架,可以与Spring、Hibernate和Struts 2等其他技术结合,实现基于角色的权限控制(Role-Based Access Control, RBAC)。这篇文档将探讨如何使用Acegi,以及SSH...
本篇文章将探讨如何使用Acegi、Spring、Hibernate和Struts2这四大组件共同构建一个基于角色的权限控制系统(Role-Based Access Control, RBAC),以确保系统的安全性。 首先,我们需要理解认证和授权这两个基本的...
在权限管理方面,Spring Security(原名Acegi)模块是关键,它提供了一套完整的认证和授权机制。通过Spring Security,我们可以定义用户角色、权限规则,实现登录验证、访问控制等功能,确保只有合法用户能访问特定...
然后,Acegi会基于角色和权限设置控制用户可以访问的页面,例如,教师会被重定向到`admin.jsp`,学生会被重定向到`stu.jsp`,管理员则会去`teacher.jsp`。 总结一下,这个例子展示了如何结合Spring、Hibernate和...
在本系统中,可能已经通过Spring Security实现了用户登录验证、角色分配和权限控制,确保只有授权用户才能访问特定的资源。 至于数据库连接,通常会有一个配置文件如`jdbc.properties`,用于存储数据库连接信息,如...
同时,Spring Security(原名Acegi)是其安全模块,提供了用户认证和授权的功能,可以实现角色级别的权限控制,支持基于URL、方法或特定业务规则的访问控制。 3. **Hibernate框架**:Hibernate是Java领域的一个ORM...
同时,Spring Security(原Acegi)是Spring生态中的安全模块,提供了全面的身份验证和授权服务,可以方便地集成到系统中,实现用户登录、角色管理、访问控制列表(ACL)等功能。 3. **Hibernate**:Hibernate是一个...
- **角色和权限**:权限管理通常基于角色,不同角色拥有不同的操作权限。系统需要定义角色并分配权限,然后根据用户的角色来确定其可以访问的资源。 - **过滤器(Filter)**:在Web应用中,使用Filter可以在请求...
在权限管理中,Hibernate可以用来实现用户角色与权限的关联,如通过查询获取用户所拥有的所有权限,进而决定其在系统中的操作范围。 Spring框架则扮演了整合其他组件的角色,提供了依赖注入(DI)和面向切面编程...
《SSH+Extjs4.0实现的权限管理系统:基于角色的权限设计》 在IT行业中,权限管理系统是保障系统安全性和数据隐私的关键组件。本文将深入探讨如何利用SSH(Spring、Struts2、Hibernate)框架结合Extjs4.0前端库,...
此外,Spring Security(原Acegi Security)是Spring4的一个扩展,专门用于处理安全问题,包括用户认证和授权,是构建权限管理系统的重要组件。 **Hibernate5** 是一个持久层框架,它简化了Java对象与数据库之间的...
在上述组合中,ACEGI(现在已经被Spring Security替代)被用来实现权限管理。它是一个基于Spring AOP的安全框架,能够无缝集成到Spring应用中,实现细粒度的访问控制。通过配置,可以定义哪些用户或角色有权访问特定...
接下来,Spring Security(之前称为Acegi Security)是Spring生态中的安全模块,主要用于实现身份验证(Authentication)和授权(Authorization)。Security 4加强了对Spring 4的支持,提供了基于表达式语言的访问...
Spring Security3(之前称为Acegi Security)是Spring生态的一部分,专门用于应用安全,提供身份验证、授权等功能,能够实现用户的登录、权限控制、会话管理等。 在这个组合中,Spring3还扮演了整合者的角色,它...
3. 角色与权限设计:系统采用RBAC(Role-Based Access Control)模型,即基于角色的访问控制。角色是一组权限的集合,用户通过被赋予不同的角色来获得相应的权限。这样,权限的管理更加灵活,减少了直接对用户进行...
它与Spring框架紧密结合,支持基于角色的访问控制(RBAC)和自定义安全策略。 Spring 3.0是Spring框架的一个重要版本,它提供了许多改进和新特性,如对JSR-303/JSR-349(Bean Validation)的支持,改进的AOP(面向...
标题中的“acegi实现用户权限”指的是在Java Web开发中使用Acegi Security框架进行权限管理的技术。Acegi Security是Spring框架的一个扩展,它提供了一套完整的安全解决方案,用于控制应用程序的访问权限。在这个...
6. "Acegi+hibernate 动态实现基于角色的权限管理.doc":Acegi(现为Spring Security的一部分)是一个安全框架,配合Hibernate进行动态角色权限管理,这个文档可能会阐述如何设置和使用这种系统。 7. "appfuse开发...