具体思路:配置三张表,别离是角色表,权限表和角色权限对应表。后端配置一个全局拦截器,在拦挡每一次申请时,去查表里该用户对应的角色权限是否存在,如果存在就通过,不存在就回绝并提醒。
一. 设计数据库表构造
- 角色表
- 权限表
- 角色权限对应表
二. 配置全局拦截器
AllInterceptor.java
public class AllInterceptor implements HandlerInterceptor {
/** * 角色对应权限表的 service */
@Autowired
private MenuService menuService;
/** * 权限表的 service */
@Autowired
private UrlService urlService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 失去申请地址
String url = request.getRequestURI();
HttpSession session = request.getSession();
String projectName = "/CustomerSystem";
// 去除申请前缀文件名(能够去也能够不去,看你次要的申请长什么样和权限表里存的地址)url = url.substring(projectName.length(), url.length());
url_info uInfo = this.urlService.selectUrl(url); if(uInfo != null){menu_info mInfo = new menu_info(); mInfo.setType(Integer.parseInt((String)session.getAttribute("type")) + 1);
mInfo.setUrlId(uInfo.getId());
int a = this.menuService.selectMenu(mInfo); // 有该权限间接通过
if(a > 0){return true;}
// 没有该权限就提醒并跳转到登录页面
session.setAttribute("msg", "<script type='text/javascript'>alert(' 道歉,您尚未有此性能权限!')</script>");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); return false; }
// 查不到此地址,间接返回提醒并跳转到登录页面 session.setAttribute("msg", "<script type='text/javascript'>alert(' 道歉,您尚未有此性能权限!')</script>");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView model) throws Exception { }
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}}
在 springMVC 配置文件里申明这个全局拦截器
springmvc-config.xml
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<!-- 配置不被拦挡的门路 -->
<mvc:exclude-mapping path="/cus_login.action"/> <mvc:exclude-mapping path="/cus_checklogin.action"/>
<mvc:exclude-mapping path="/cus_exit.action"/> <!-- 把拦截器注入到 spring 容器中 -->
<bean class="com.itheima.core.interceptor.CustomerAllInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
至此,权限治理就曾经实现了。
三. 上面是我设计实现的校园选课零碎里的权限治理模块的页面
我的项目的 GitHub 地址,点击返回
欢送大家返回,给个 star。
首页:
登录后的页面
管理员登录后的权限治理页面