`
jelly
  • 浏览: 300595 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

运行时修改Acegi中authorities 授权信息

阅读更多

运行时修改Acegi中authorities 授权信息


用户授权信息在登录的时候就被存放在securityContextHolder,我们可以再任何时候去查看这些授权信息。
下面的代码可以获得当前授权信息:

Authentication currentUser = securityContextHolder.getContext().getAuthentication();
UserDetailsImpl userDetails = (UserDetailsImpl) currentUser.getPrincipal();
GrantedAuthority gas[] =userDetails.getAuthorities();

 
然后,我想添加一些授权到这个数组gas,然后再次放回当前用户使之生效。

userDetails.setAuthorities(gas);

 

My web interface is made using acegi taglibs in order to render the menu only with granted options:

Code:
<authz:authorize ifAnyGranted="MENU1,MENU2">
But, after refreshing or rendering again the JSP, it looks like the new granted options are not available (or the user authorities are not updated) and I can't see the new menu options that I should see.

Anyone could help me whit this? Any idea?

解决办法

Okay ... I found the solution.

Acegi securitycontext stores the user information in the ContextHolder. And you can get all the information of the authenticated user.

You can change the authorities in this way:
SecurityContext sc = SecurityContextHolder.getContext();
Authentication currentUser = sc.getAuthentication();
UserDetailsImpl userDetails = (UserDetailsImpl) currentUser.getPrincipal();

ArrayList authorities = new ArrayList(2);
authorities.add(new GrantedAuthorityImpl("DUMMY"));
			userDetails.setAuthorities((GrantedAuthority[])authorities.toArray(new GrantedAuthority[]{}));
 
But this is only valid for the life of the current thread. If you need to make persistent this every time you invoke the above code:
Code:
SecurityContext sc = SecurityContextHolder.getContext();
Authentication currentUser = sc.getAuthentication();
UserDetailsImpl userDetails = (UserDetailsImpl) currentUser.getPrincipal();
You have to re-aunthenticate the authentication token (in my issue, an UsernamePasswordAuthenticationToken) in this way:
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(currentUser.getPrincipal(),currentUser.getCredentials(),(GrantedAuthority[])authorities.toArray(new GrantedAuthority[]{}));

sc.setAuthentication(authentication);
SecurityContextHolder.setContext(sc);
 
Now, the changes will be available every time you need it.
<!-- / message -->
分享到:
评论

相关推荐

    spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行

    spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,...

    基于spring的Acegi安全框架认证与授权的分析及扩展.pdf

    Acegi的设计理念旨在解决传统Java认证和授权服务(JAAS)中存在的不足,如政策文件难以管理和用户权限无法根据对象状态动态调整等问题。 #### 2. Acegi安全框架的核心组件分析 Acegi的安全框架由多个核心组件构成...

    acegi

    - AOP在Acegi中用于实现安全拦截,通过定义安全拦截器,可以在方法调用前、后或异常时执行特定的安全操作,比如权限检查。 5. **迁移至Spring Security** - 随着Spring框架的发展,Spring Security成为Acegi的...

    acegi认证,授权

    学习acegi的第一步, &lt;bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"&gt; PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter,basicProcessingFilter,...

    Spring源代码解析(十):Spring_Acegi框架授权的实现.doc

    在Spring框架中,Acegi(现在已经并入Spring Security)是一个强大的安全管理组件,它提供了认证和授权功能。在本文中,我们将深入探讨Spring_Acegi框架如何实现授权机制,特别是通过`FilterSecurityInterceptor`来...

    Acegi框架介绍 acegi安全与认证

    比如在论坛应用中,用户可以修改自己的信息,但不能修改其他用户的信息。Acegi在执行业务逻辑之前检查用户对操作对象的权限,确保操作的合法性。 4. **Servlet过滤器与AOP的结合** Acegi使用Servlet过滤器来保护...

    基于java的ACEGI

    6. **处理异常**:配置Acegi的异常处理机制,当用户尝试访问未授权的资源或认证失败时,提供适当的反馈。 Acegi虽然已被Spring Security取代,但它的设计理念和核心功能在Spring Security中得以延续和强化。理解...

    spring acegi 使用工程demo

    在请求到达时,Acegi会检查请求中是否有有效的身份验证信息。 2. **授权**:Acegi的授权机制主要由`AccessDecisionManager`和`SecurityInterceptor`完成。`AccessDecisionManager`负责决定是否允许访问受保护的资源...

    Acegi例子代码+一个很好的学习Acegi的网址

    通过运行此示例,你可以了解Acegi的配置过程以及如何在实际应用中集成。 2. **学习网址**:提供了一个适合初学者的基础教程,从零开始学习Acegi的用法和配置。这个网站可能包含了详细的教程、示例代码和常见问题...

    spring acegi 详细文档

    Acegi还提供了丰富的接口和类,允许开发者自定义认证和授权流程,例如创建自定义的`UserDetailsService`来从数据源加载用户信息,或者实现自定义的`AuthenticationProvider`以支持特定的认证逻辑。 尽管Spring ...

    Acegi学习笔记(JAVA系统安全编程时用到)

    在 `acegi-config.xml` 文件中,你可以定义认证和授权策略,比如用户存储(UserDetailsService)、认证管理器(AuthenticationManager)和权限访问决策器(AccessDecisionManager)。 Acegi 还提供了许多预定义的...

    ACEGI

    Acegi Security是一个专门为Spring框架设计的权限控制框架,旨在为基于J2EE的企业级应用程序提供全面的安全服务。...因此,Acegi Security成为了许多Spring开发者在实现应用程序安全控制时的首选框架。

    Acegi-spring安全框架

    例如,用户只能修改自己的信息,而不能修改其他用户的信息。 Acegi的体系结构由两个主要组件构成: 1. AuthenticationManager:负责用户身份认证。当用户尝试访问受保护的资源时,AuthenticationManager会检查用户...

    Acegi使用.pdf

    1. **Authentication对象**:封装了Principal(主体)、Credential(凭证)和授权信息,同时还可能包含客户发起认证请求时的额外信息,如IP地址。 2. **ContextHolder对象**:利用ThreadLocal存储Authentication...

    Spring Acegi权限控制

    Spring Acegi权限控制是Spring框架中用于实现Web应用安全的一种解决方案。Acegi Security(现已被Spring Security替代)是一个功能强大的安全框架,它主要解决了认证(Authentication)和授权(Authorization)这两...

    菜鸟-手把手教你把Acegi应用到实际项目中(1.2)

    本教程将引导初学者逐步了解如何在实际项目中应用Acegi安全框架,以便为你的Web应用提供强大的身份验证和授权功能。 首先,让我们理解Acegi的基础概念。Acegi的核心组件包括SecurityContext、Authentication和...

    acegi+ldap

    在Spring和Acegi的结合中,Acegi提供了一个灵活且可扩展的安全基础设施,而LDAP作为身份验证和授权的数据源,可以存储用户账户信息和权限设置。将Acegi与LDAP整合,可以使应用程序利用LDAP服务器进行用户登录验证和...

    Acegi中文参考手册

    在阅读《Acegi最新版(v1.0.4)中文参考手册》时,你可以深入学习以上各个方面,理解每个组件的工作原理,以及如何配置和使用它们来保护你的应用程序。同时,手册也会涵盖具体的配置示例、最佳实践和常见问题解答,...

Global site tag (gtag.js) - Google Analytics