spring+spring-mvc+mybatis框架权限的实现

来源:互联网 发布:pcb编程工装夹具 编辑:程序博客网 时间:2024/06/05 14:23
/**
 * 登陆的时候需要拦截器
 * 框架的拦截器体现了一种设计模式(适配器模式)
 * 1)实现接口 HandlerInterceptor
 * 2)继承父类 HandlerInterceptorAdapter
 * 
 * a)判断用户是否登陆
 * b)如果登陆,继续访问
 * c)如果没有登陆,跳转回到登陆页面。
 * @author 18801

 * */

package com.atguigu.atcrowdfunding.interceptors;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import com.atguigu.atcrowdfunding.bean.User;public class LoginInterceptor extends HandlerInterceptorAdapter {/** * 在控制器执行之前进行拦截和处理 * 请求可以根据方法的返回结果来确定是否需要继续执行,true,继续执行,false,请求结束 */public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession();//判断用户是否登陆User loginUser = (User)session.getAttribute("loginUser");if ( loginUser == null ) {//如果没有登陆,跳转回到登陆页面。 response.sendRedirect(session.getServletContext().getContextPath() + "/login.htm");return false;} else {//如果登陆,继续访问return true;}//}}/** * 此方法在处理器完成之后执行 */public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {super.postHandle(request, response, handler, modelAndView);}/** * 此方法在请求结束时(视图渲染完毕)执行 */public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {super.afterCompletion(request, response, handler, ex);}}
在Spring_-mvc。xml的配置文件加入配置 

   <mvc:interceptors>           <mvc:interceptor>              <mvc:mapping path="/**"/>              <mvc:exclude-mapping path="/login/index.do"/>              <bean class="com.lanke.app.interceptor.LoginInterceptor"></bean>          </mvc:interceptor>      </mvc:interceptors> 
<mvc:exclude-mapping path="/login/index.do"/>的意思是 对这个链接不进行拦截(可以设置多个)
做到这里我们只是让拦截器起拦截作用,接下来是登陆授权(用户的权限是放在session里的)

package com.atguigu.atcrowdfunding.interceptors;import java.util.HashSet;import java.util.List;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.servlet.handler.HandlerInterceptorAdapter;import com.atguigu.atcrowdfunding.bean.Permission;import com.atguigu.atcrowdfunding.manager.service.PermissionService;import com.atguigu.atcrowdfunding.util.StringUtil;/** * 授权拦截器 * 只有用户拥有相应的权限,才能发送相应的请求。 * 1)获取请求路径 * 2)判断当前路径需要不需要授权 * 3)如果不需要授权,那么直接访问 * 4)如果需要授权,那么判断当前的用户是否具有相应的权限 * 5)如果有相应的权限,那么继续访问 * 6)如果没有相应的权限,跳转到错误页面 * @author 18801 * */public class AuthInterceptor extends HandlerInterceptorAdapter {@Autowiredprivate PermissionService permissionService;public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {// 1)获取请求路径 String uri = request.getRequestURI(); // 2)判断当前路径需要不需要授权 // 2-1) 获取所有的授权访问路径 Set<String> authPathSet =     (Set<String>)request.getSession().getServletContext().getAttribute("authPathSet");  if ( authPathSet.contains(uri) ) { // 4)如果需要授权,那么判断当前的用户是否具有相应的权限 Set<String> userAuthPathSet = (Set<String>)request.getSession().getAttribute("userAuthPathSet"); if ( userAuthPathSet.contains(uri) ) {// 5)如果有相应的权限,那么继续访问 return true; } else {// 6)如果没有相应的权限,跳转到错误页面 response.sendRedirect(request.getSession().getServletContext().getContextPath() + "/error.htm"); return false; }  } else {// 3)如果不需要授权,那么直接访问 return true; }}}

简单的权限控制就可以实现了

 <mvc:exclude-mapping path="/login/index.do"/>的意思是 对这个链接不进行拦截(可以设置多个)
用户的权限是放在session里的
原创粉丝点击