spring security 3 动态获取权限

主要讲如何动态获取,因为之前是spring容器启动时获取数据库中的权限。

在配置过程中,出现了不生效的问题。

之前的代码:这种方式不生效

ApplicationContext ctx = new ClassPathXmlApplicationContext("application*.xml"); 
FactoryBean factoryBean = (FactoryBean) ctx.getBean("&filterInvocationSecurityMetadataSource"); 
DefaultFilterInvocationSecurityMetadataSource fids = (DefaultFilterInvocationSecurityMetadataSource) factoryBean.getObject(); 
FilterSecurityInterceptor filter = (FilterSecurityInterceptor) ctx.getBean("filterSecurityInterceptor"); 
filter.setSecurityMetadataSource(fids);

改为:

HttpServletRequest request = ServletActionContext.getRequest();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
FactoryBean factoryBean = (FactoryBean) ctx.getBean("&filterInvocationSecurityMetadataSource");
FilterInvocationSecurityMetadataSource fids = (FilterInvocationSecurityMetadataSource) factoryBean.getObject();
FilterSecurityInterceptor filter = (FilterSecurityInterceptor) ctx.getBean("filterSecurityInterceptor");
filter.setSecurityMetadataSource(fids);

改成下面的代码后就可以了,自己思考了一下,当时感觉spring是单例的,获得到的bean也是同一个bean即可。

之所以不生效,我感觉就是bean并不是重新再spring中获取,而是找到web中已经得到的,然后再改他的授权MAP.

自己的一些理解,不知道对不对。求拍砖

时间: 2024-08-01 07:09:54

spring security 3 动态获取权限的相关文章

在Android 6.0 设备上动态获取权限

众所周知,Android 6.0 相比之前的Android版本有一个很大的不同点,就是动态获取权限.最近要修改原来的程序适配安卓6.0+.以记录下在Android 6.0 上如何动态获取权限. 下面从自己一开始的问题入手 实现拨号功能 说到拨号,一个 Intent 就搞定,代码如下, 1 2 3 4 5 6 private void callDirectly(String mobile){ Intent intent = new Intent(); intent.setAction("andro

[转]Spring Security 可动态授权RBAC权限模块实践

RBAC:基于角色的访问控制(Role-Based Access Control) 先在web.xml 中配置一个过滤器(必须在Struts的过滤器之前) [html] view plaincopy <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy<

spring security 3.1 实现权限控制

简单介绍:spring security 实现的权限控制,能够分别保护后台方法的管理,url连接訪问的控制,以及页面元素的权限控制等, security的保护,配置有简单到复杂基本有三部: 1) 採用硬编码的方式:详细做法就是在security.xml文件里,将用户以及所拥有的权限写死,通常是为了查看环境搭建的检查状态. 2) 数据库查询用户以及权限的方式,这种方式就是在用户的表中直接存入了权限的信息,比方 role_admin,role_user这种权限信息,取出来的时候,再将其拆分. 3)

Spring Security(15)——权限鉴定结构

目录 1.1      权限 1.2      调用前的处理 1.2.1     AccessDecisionManager 1.2.2     基于投票的AccessDecisionManager实现 1.3      调用后的处理 1.4      角色的继承 1.1    权限 所有的Authentication实现类都保存了一个GrantedAuthority列表,其表示用户所具有的权限.GrantedAuthority是通过AuthenticationManager设置到Authent

Spring Security(14)——权限鉴定基础

目录 1.1     Spring Security的AOP Advice思想 1.2     AbstractSecurityInterceptor 1.2.1    ConfigAttribute 1.2.2    RunAsManager 1.2.3    AfterInvocationManager Spring Security的权限鉴定是由AccessDecisionManager接口负责的.具体来说是由其中的decide()方法负责,其定义如下. void decide(Authe

Spring Security——基于表达式的权限控制

Spring Security允许我们在定义URL访问或方法访问所应有的权限时使用Spring EL表达式,在定义所需的访问权限时如果对应的表达式返回结果为true则表示拥有对应的权限,反之则无.Spring Security可用表达式对象的基类是SecurityExpressionRoot,其为我们提供了如下在使用Spring EL表达式对URL或方法进行权限控制时通用的内置表达式. 表达式 描述 hasRole([role]) 当前用户是否拥有指定角色. hasAnyRole([role1,

SpringBoot集成Spring Security(5)——权限控制

在第一篇中,我们说过,用户<–>角色<–>权限三层中,暂时不考虑权限,在这一篇,是时候把它完成了. 为了方便演示,这里的权限只是对角色赋予权限,也就是说同一个角色的用户,权限是一样的.当然了,你也可以精细化到为每一个用户设置权限,但是这不在本篇的探讨范围,有兴趣可以自己实验,原理都是一样的. 源码地址:https://github.com/jitwxs/blog_sample 文章目录 一.数据准备 1.1 创建 sys_permission 表 1.2 创建 POJO.Mappe

Android动态获取权限

android权限的变化 在Android6.0以前的版本的时候,Android的权限都是在安装的时候全部的配置完成的.然而这往往会造成一些安全的问题. Google的解决办法: 将Android中的权限分为了两大类: Normal:权限不会直接涉及到用户的隐私.如果你的应用在manifest清单文件中配置了此类的权限,那么系统会自动的同意. Dangerous权限能够让应用去访问用户的隐私数据.如果你的应用在manifest中配置了此类的权限,那么久得需要用户同意此类权限. 注意:如果你的应用

android 6.0之后动态获取权限

Android 6.0 动态权限申请 1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在运行时根据用户的需要动态授予.这样就不需要在安装时被强迫同意某些权限. 2. 正常权限 和 危险权限 Android系统权限分为几个保护级别.需要了解的两个最重要保护级别是 正常权限 和 危险权限: (1)正常权限: 涵盖应用需要访问其沙盒外部数据或资源,但对用