加注解时插入权限切面@EnableDataSecurity
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; /**
* Annotation which indicates the annotated method must be secured.
*/
@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EnableDataSecurity { /**
* 启用当前机构条件开关 ON/OFF
* */
public String enableCurrentOrgCondition() default "ON"; /**
* 启用机构货主表关联开关 ON/OFF
* */
public String enableOrgOwnerRelation() default "ON"; /**
* 启用域管理员创建货主 所属域开放权限开关 ON/OFF,只针对域管理员
* */
public String enableOwnerCreateDomainAuth() default "ON";
}
package com.yundaex.common.security.advice; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint;
import org.springframework.stereotype.Component; import com.yundaex.common.security.annotation.EnableDataSecurity;
import com.yundaex.common.security.context.WMSSecurityContext; @Aspect
@Component("enableDataSecurityAroundAdvice")
public class EnableDataSecurityAroundAdvice { //private static final Logger logger = Logger.getLogger(EnableDataSecurityAroundAdvice.class); /*public EnableDataSecurityAroundAdvice() {
logger.debug("EnableDataSecurityAroundAdvice initial success");
}*/ @Pointcut(value = "@annotation(enableDataSecurity)", argNames = "enableDataSecurity")
protected void enableDataSecurity(EnableDataSecurity enableDataSecurity) {} /**
* indicate the method should be exeucte the data security operation.
* */
// @SuppressWarnings("rawtypes")
@Before(value = "enableDataSecurity(enableDataSecurity)", argNames="enableDataSecurity")
public void before(JoinPoint joinPoint, EnableDataSecurity enableDataSecurity) throws Throwable { // Class clazz = joinPoint.getTarget().getClass();
if (MethodInvocationProceedingJoinPoint.class.isAssignableFrom(joinPoint.getClass())) { MethodInvocationProceedingJoinPoint methodInvocationProceedingJoinPoint = (MethodInvocationProceedingJoinPoint) joinPoint;
final String methodName = methodInvocationProceedingJoinPoint.getSignature().getName(); // String methodSignature = clazz.getName() + methodName;
String enableCurrentOrgCondition = enableDataSecurity.enableCurrentOrgCondition();
String enableOrgOwnerRelation = enableDataSecurity.enableOrgOwnerRelation();
String enableOwnerCreateDomainAuth = enableDataSecurity.enableOwnerCreateDomainAuth();
String methodSignature = methodName.concat("&")
.concat(enableCurrentOrgCondition)
.concat("&").concat(enableOrgOwnerRelation)
.concat("&").concat(enableOwnerCreateDomainAuth);
//set to thread local to proceeding
WMSSecurityContext.getDataSecurityMethodSignature().set(methodSignature);
} else {
//TODO THROW EXCEPTION TO EXPLAIN "Unsupport in the scenario using annotation 'EnableDataSecurity'"
} } @After(value = "enableDataSecurity(enableDataSecurity)", argNames="enableDataSecurity")
public void after(JoinPoint joinPoint,EnableDataSecurity enableDataSecurity) throws Throwable {
WMSSecurityContext.getDataSecurityMethodSignature().remove();
} }
applicationContext.xml <aop:aspectj-autoproxy proxy-target-class="true"/>
加注解时插入权限切面@EnableDataSecurity的更多相关文章
- linux环境,hidraw设备自动加载时默认权限的设置方法
在linux系统中,hidraw设备会自动加载并设置默认权限,但系统的默认只允许root用户访问,普通用户是不允许读写. 设置的方法是修改udev的配置,配置路径是/etc/udev/rules.d/ ...
- Shiro入门之二 --------基于注解方式的权限控制与Ehcache缓存
一 基于注解方式的权限控制 首先, 在spring配置文件applicationContext.xml中配置自动代理和切面 <!-- 8配置自动代理 --> <bean cl ...
- Android之运行时相机权限和联系人权限获取
原文:Android之运行时相机权限和联系人权限获取 本文链接:http://blog.csdn.net/qq_16628781/article/details/61623502 Android之运行 ...
- springcloud项目实现自定义权限注解进行接口权限验证
一般在项目开发中会根据登录人员的权限大小对接口也会设置权限,那么对接口权限是怎么实现的呢,大多数都是用自定义权限注解,只需要在接口上加上一个注解就可以实现对接口的权限拦截,是否对该接口有权调用 接下来 ...
- @@IDENTITY在加触发器时返回错误的ID值
表ID是自增的,所以在添加时要查一下,之前是用@@IDENTITY来查,最近在加触发器时发现返回的会是在触发器中插入语句的数据ID值,上网找了下资料,发现是因为@@IDENTITY 将返回在当前会话中 ...
- PHP 执行命令时sudo权限的配置
PHP 执行命令时sudo权限的配置 1.先写一个PHP文件 <?php system('whoami'); 先看自己的apache2的用户是谁,下面是笔者的截图,笔者使用apche2的用户是w ...
- 查询时根据权限更改sql
import java.lang.reflect.Method; import org.apache.log4j.Logger; import org.springframework.aop.Meth ...
- 【spring data jpa】使用spring data jpa 的删除操作,需要加注解@Modifying @Transactional 否则报错如下: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call
使用spring data jpa 的删除操作,需要加注解@Modifying @Transactional 否则报错如下: No EntityManager with actual tran ...
- [Swift通天遁地]八、媒体与动画-(3)实现视频播放的水印、Overlay、暂停时插入广告等效果
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
随机推荐
- [HDU4652]Dice
vjudge 题意 \(m\)面骰子,求 1.连续出现\(n\)个相同的停止: 2.连续出现\(n\)个不同的停止 的期望投骰子次数. \(n,m ≤ 10^6\) sol 首先考虑一个转移式子吧. ...
- ACM学习历程——UVA 127 "Accordian" Patience(栈;模拟)
Description ``Accordian'' Patience You are to simulate the playing of games of ``Accordian'' patie ...
- poj 3469 Dual Core CPU——最小割
题目:http://poj.org/problem?id=3469 最小割裸题. 那个限制就是在 i.j 之间连双向边. 根据本题能引出网络流中二元关系的种种. 别忘了写 if ( x==n+1 ) ...
- Poj_1004_FinancialManagement
一.Description Larry graduated this year and finally has a job. He's making a lot of money, but someh ...
- unittest 执行测试脚本输出测试报告
import unittestimport HTMLTestRunnertest as HTMLTestRunner#获取路径path = './'#创建测试套件,读取测试脚本suite = unit ...
- mybatis 学习三 mapper xml 配置信息
mapper xml 映射文件 1,select 标签 简单是用就这样,其中resultType 代表从这条语句中返回的期望类型的类的完全限定名或别名.也可以使用resultMap对应的id ...
- [原]toString()方法的复写作用, 以及打印集合.
java中的每个类的根都是Object的子类. 必然有拥有了Object的所有方法. 在package java.lang.Object源码中: public String toString() { ...
- sort,uniq,cut,wc命令详解
sortsort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 s ...
- 02_android下单元测试
Java的单元测试JUnit. Java程序入口是main方法.一般不在安卓程序入口 @Override protected void onCreate(Bundle savedInstanceSta ...
- 六种获取配置properties文件的方法
总结一下六种获取配置properties文件的方法,代码如下: package com.xujingyang.test ; import java.io.BufferedInputStream ; i ...