freeMarker数据获取与后端方法级别访问控制:
freemarker中表单数据的提交:
获取到的多选下拉框数据为字符串:roleId: “14,2,3,17”
所以传到后端时,需要用String接收,然后进行依赖","分隔。
freeMarker数据表格提交:
var dataUsers=table.checkStatus(obj.config.id).data;
console.log(dataUsers);
var ids="ids=";
for (var i=0;i< data.length;i++){
if (i==(data.length-1)){
ids+=data[i].id;
}else{
ids+=data[i].id+"&ids="
}
}
$.ajax({
type:'post',
url:ctx +'/user/deleteUsers',
data:ids,
dataType:'json',
success:function (data) {
if (data.code==200){
tableIns.reload();
}else{
layer.msg(data.msg,{icon:5});
}
}
});
后台可以用数组接收。
后端方法级别访问控制:
防止用户通过浏览器来输入资源地址从而越过ui界面来访问后端资源,所以接下来加入控制方法级别资源的访问控制操作,这里使用aop+自定义注解实现。
自定义注解:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequirePermission {
String code();
}
定义aop切面类 拦截指定注解标注的方法
@Component
@Aspect
public class PermissionProxy {
@Autowired
private HttpSession session;
@Around(value = "@annotation(com.shsxt.crm.annotation.RequirePermission)")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
List<String> permissionCode = (List<String>) session.getAttribute("permissionCode");
if (permissionCode==null || permissionCode.size()==0){
throw new NoLoginException();
}
Object result = null;
MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
RequirePermission declaredAnnotation = methodSignature.getMethod().getDeclaredAnnotation(RequirePermission.class);
if (!(permissionCode.contains(declaredAnnotation.code()))){
throw new NoLoginException();
}
result=pjp.proceed();
return result;
}
}
方法使用
@RequirePermission(code = "101001")
return result;
}
}
方法使用
```java
@RequirePermission(code = "101001")