具体思路:配置三张表,分别是角色表,权限表和角色权限对应表。后端配置一个全局拦截器,在拦截每一次请求时,去查表里该用户对应的角色权限是否存在,如果存在就通过,不存在就拒绝并提示。
一. 设计数据库表结构
- 角色表
- 权限表
- 角色权限对应表
二. 配置全局拦截器
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。
首页:
登录后的页面
管理员登录后的权限管理页面
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。