SSM框架下实现权限管理(附源码)

407 阅读1分钟

具体思路:配置三张表,分别是角色表,权限表和角色权限对应表。后端配置一个全局拦截器,在拦截每一次请求时,去查表里该用户对应的角色权限是否存在,如果存在就通过,不存在就拒绝并提示。

一. 设计数据库表结构

  • 角色表

  • 权限表

  • 角色权限对应表

二. 配置全局拦截器

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。

首页:

登录后的页面

管理员登录后的权限管理页面