具体思路:配置三张表,分别是角色表,权限表和角色权限对应表。后端配置一个全局拦截器,在拦截每一次请求时,去查表里该用户对应的角色权限是否存在,如果存在就通过,不存在就拒绝并提示。
一. 设计数据库表结构
- 角色表
- 权限表
- 角色权限对应表
二. 配置全局拦截器
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。
首页:
登录后的页面
管理员登录后的权限管理页面