使用拦截器和自定义注解实现权限控制
2013-12-06 18:03
281 查看
使用注解为每个Action的方法声明权限。
1.首先创建自定义注解,用于设置权限:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PrivilegeControll {
//权限的名称,可能有很多个权限,所以用数组表示
String[] privilegeName();
}
2.在需要权限控制的action上面添加注解
@PrivilegeControll(privilegeName="增加章节")
@Action(value="toAddChapter",results={@Result(location="/WEB-INF/common/addChapter.jsp")})
public String toAddChapter() throws Exception{
return SUCCESS;
}
如果有两个或者以上的权限可以写成
@PrivilegeControll(privilegeName={"增加章节","修改章节"})
@Action(value="getChapterNo",results={@Result(type="json",params={"root","json"})})
public String getChapterNo() throws Exception{.....}
3.添加拦截器
public class CheckLoginInterceptor extends MethodFilterInterceptor{
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
//获取action方法名称
String methodName = invocation.getProxy().getMethod();
//得到Method对象
Method method = invocation.getAction().getClass().getMethod(methodName);
//如果方法存在,并且该方法添加了我们自定义的注解
if(method != null && method.isAnnotationPresent(PrivilegeControll.class)){
//获取注解对象
PrivilegeControll privilegeControll = method.getAnnotation(PrivilegeControll.class);
//获取访问该方法需要的权限的名称
String[] privilegeName = privilegeControll.privilegeName();
for(Privilege privilege : role.getPrivileges()){
for(int i = 0;i<privilegeName.length;i++){
//如果拥有权限则放行 if(privilegeName[i].equals(privilege.getPrivilegeName())){
return invocation.invoke();
}
}
}
}
}
//否则返回没有权限的视图
return "noPrivilege";
}
}
4.配置noPrivilege的视图
<global-results>
<result name="login" type="redirect">/login.jsp</result>
<result name="input">/error.html</result>
<result name="noPrivilege">/noPrivilege.html</result>
</global-results>
1.首先创建自定义注解,用于设置权限:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PrivilegeControll {
//权限的名称,可能有很多个权限,所以用数组表示
String[] privilegeName();
}
2.在需要权限控制的action上面添加注解
@PrivilegeControll(privilegeName="增加章节")
@Action(value="toAddChapter",results={@Result(location="/WEB-INF/common/addChapter.jsp")})
public String toAddChapter() throws Exception{
return SUCCESS;
}
如果有两个或者以上的权限可以写成
@PrivilegeControll(privilegeName={"增加章节","修改章节"})
@Action(value="getChapterNo",results={@Result(type="json",params={"root","json"})})
public String getChapterNo() throws Exception{.....}
3.添加拦截器
public class CheckLoginInterceptor extends MethodFilterInterceptor{
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
//获取action方法名称
String methodName = invocation.getProxy().getMethod();
//得到Method对象
Method method = invocation.getAction().getClass().getMethod(methodName);
//如果方法存在,并且该方法添加了我们自定义的注解
if(method != null && method.isAnnotationPresent(PrivilegeControll.class)){
//获取注解对象
PrivilegeControll privilegeControll = method.getAnnotation(PrivilegeControll.class);
//获取访问该方法需要的权限的名称
String[] privilegeName = privilegeControll.privilegeName();
for(Privilege privilege : role.getPrivileges()){
for(int i = 0;i<privilegeName.length;i++){
//如果拥有权限则放行 if(privilegeName[i].equals(privilege.getPrivilegeName())){
return invocation.invoke();
}
}
}
}
}
//否则返回没有权限的视图
return "noPrivilege";
}
}
4.配置noPrivilege的视图
<global-results>
<result name="login" type="redirect">/login.jsp</result>
<result name="input">/error.html</result>
<result name="noPrivilege">/noPrivilege.html</result>
</global-results>
相关文章推荐
- 利用struts2拦截器加自定义注解实现权限控制
- 在struts2.1中使用注解和拦截器实现权限细粒度控制
- JAVAWEB开发之Servlet3.0新特性的使用以及注解的详细使用和自定义注解的方法、动态代理的使用、利用动态代理实现细粒度的权限控制以及类加载和泛型反射
- 自定义注解+Struts2拦截器实现简单权限控制
- 在struts2.1中使用注解和拦截器实现权限细粒度控制
- 在struts2.3.4.1中使用注解、反射、拦截器实现基于方法的权限控制
- struts2 使用注解、反射、拦截器实现基于方法的权限控制
- 自定义注解+拦截器实现权限控制
- 自定义注解+拦截器实现权限控制
- spring AOP + 自定义注解实现权限控制小例子
- 细粒度 自定义注解 权限控制具体实现
- SpringBoot 自定义注解实现权限控制
- 【Spring MVC】教程——使用拦截器实现权限控制
- 使用自定义过滤器-Filter--实现对权限的控制
- 使用拦截器或者AOP实现权限管理(OA系统中实现权限控制)
- 使用Struts2的拦截器实现权限控制
- 使用拦截器实现权限控制
- 使用Struts2的拦截器实现权限控制
- 基于拦截器和注解实现页面的访问权限控制
- 如何自定义注解实现简单的权限控制