您的位置:首页 > 编程语言 > Java开发

基于注解的Spring MVC权限控制方法

2015-04-22 17:21 316 查看
需求:要实现一个权限的验证,在web里面通常都是用url路径来控制权限。

demo:

步骤1、

首先在springmvc的配置文件里面配置

<mvc:interceptors>
<!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<!-- 如果不定义 mvc:mapping path 将拦截所有的URL请求 -->
<bean class="com.ssh.util.AuthInterceptor"></bean>
</mvc:interceptors>


步骤2、

编写类:AuthPassport.java

package com.ssh.util;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthPassport {
boolean validate() default true;
String fksz() default "";
String hbqq() default "";
String sh() default "";
String pz() default "";
}


编写类:AuthInterceptor.java

package com.ssh.util;

import java.util.Iterator;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.ssh.dao.EmployeeDao;
import com.ssh.entities.Employee;
import com.ssh.entities.Privilege;
import com.ssh.service.EmployeeService;

public class AuthInterceptor extends HandlerInterceptorAdapter {

@Autowired
private EmployeeService employeeService;
@Autowired
private EmployeeDao employeeDao;

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {

AuthPassport authPassport = ((HandlerMethod) handler).getMethodAnnotation(AuthPassport.class);

// 没有声明需要权限,或者声明不验证权限
if (authPassport == null || authPassport.validate() == false) {
System.out.println("没有声明需要权限");
System.out.println(request.getRequestURL().toString());
System.out.println("===============================");
return true;
} else {
System.out.println("声明需要权限");
System.out.println(request.getRequestURL().toString());
String urlpath[] = request.getRequestURL().toString().split("/remit2/");
System.out.println(urlpath[1]);
Employee employee = (Employee) request.getSession().getAttribute("emp");
System.out.println(employee);
Employee employee2 = employeeService.getEmployeeByName(employee.getName());
System.out.println(employee2);
Set<Privilege> priSets = employee2.getPrivileges();
Iterator<Privilege> it = priSets.iterator();
while (it.hasNext()) {
Privilege o = it.next();
System.out.println(o.getName());
if (o.getName().equals(authPassport.fksz())){
System.out.println("风控设置");
return true;
}else if (o.getName().equals(authPassport.hbqq())){
System.out.println("划拨请求");
return true;
}else if (o.getName().equals(authPassport.sh())){
System.out.println("审核");
return true;
}else if (o.getName().equals(authPassport.pz())){
System.out.println("批准");
return true;
}
}
response.sendRedirect("test");
return false;
//              System.out.println("===============================");
//              // 在这里实现自己的权限验证逻辑
//              if (false) {
//                  // 如果验证成功返回true(这里直接写false来模拟验证失败的处理)
//                  return true;
//              } else {// 如果验证失败
//                      // 返回到登录界面
//                  response.sendRedirect("test");
//                  return false;
//              }
}
} else {
return true;
}
}
}


代码:demo下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  注解 mvc 权限控制