在页面级可以用自定义标签根据权限来显示页面元素。那么后台方法级还要做权限控制吗(如用拦截器)。页面上只是隐藏入口,如果方法级不做控制,输入对应的url还是能进入方法的。
------解决方案--------------------
拦截器代码给你参考:
package com.crm.action;
import java.util.Map;
import com.crm.entity.SysRight;
import com.crm.entity.SysUser;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class SysUserInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation arg0) throws Exception {
//得到调用的方法名
String methodName = arg0.getProxy().getMethod();
//如果是login方法则不做权限验证
if(!methodName.equals("login")){
//得到session
Map session = arg0.getInvocationContext().getSession();
//得到parameters(得到提交过来的authorizeId权限编号)
Map parameters = arg0.getInvocationContext().getParameters();
SysUser user = (SysUser)session.get("user");
if(user==null || parameters==null){
return "message";
}
//得到权限编号
String rigthCode[] = (String[])parameters.get("rigthCode");
if(rigthCode!=null){
//遍历当前用户所有的权限
boolean flag = false;
for(SysRight right:user.getUserRole().getSetrRights()){
if(right.getRightCode().equals(rigthCode[0])){
flag = true;
break;
}
}
if(!flag){
return "message";
}
}
}
arg0.invoke();
return null;
}
}