Shiro与SSM框架整合,实现系统权限控制

本文主要讲解Shiro安全框架与SSM(SpringMVC/Spring/Mybatis)框架整合,实现系统的权限控制。
本文建立在SSM框架的基础上,默认已经搭建了SSM框架。具体的SSM框架搭建,请参考文章“SSM框架搭建”,这里不做赘述。
Shiro安全框架与SSM整合的示例代码,github地址:https://github.com/1287642889/Shiro_SSM。

前期准备工作:
1、新建Maven工程,并搭建SSM框架,项目结构如下所示:


Shiro与SSM框架整合,实现系统权限控制_第1张图片
image.png

2、pom.xml具体如下:


  
    
    
      org.springframework
      spring-context
      5.0.0.RELEASE
    
    
      org.springframework
      spring-core
      5.0.0.RELEASE
    
    
      org.springframework
      spring-beans
      5.0.0.RELEASE
    
    
      org.springframework
      spring-web
      5.0.0.RELEASE
    
    
      org.springframework
      spring-webmvc
      5.0.0.RELEASE
    
    
      org.springframework
      spring-aop
      5.0.0.RELEASE
    
    
      org.springframework
      spring-tx
      5.0.0.RELEASE
    
    
      org.springframework
      spring-jdbc
      5.0.0.RELEASE
    


    
    
      org.mybatis
      mybatis
      3.4.5
    

    
      org.mybatis
      mybatis-spring
      1.3.1
    

    
    
      org.apache.shiro
      shiro-core
      1.3.2
    
    
      org.apache.shiro
      shiro-spring
      1.3.2
    


    
    
      com.microsoft.sqlserver
      sqljdbc4
      4.0
    

    
    
      com.mchange
      c3p0
      0.9.5.2
    

    
    
      javax.servlet
      jsp-api
      2.0
      provided
    

    
    
      javax.servlet
      jstl
      1.2
    

    
    
      commons-fileupload
      commons-fileupload
      1.3.2
    


    
    
      junit
      junit
      4.12
      test
    
  

  
    
      
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        2.2
      
    
  

3、数据库中新建用户表、角色表、资源表、用户角色表、角色资源表这5张表,在Users表中添加wzf、a、b三个用户;在Role表中添加admin、role1、role2三个角色,在Permission表中添加/student/add、/student/delete、/student/update、/student/select四个资源权限;并在相应的关系表中添加对应的数据。
本系统的权限分配情况是:wzf用户是admin角色,拥有所有的资源权限;a用户是role1角色,拥有除perms[student:delete]外的所有资源权限;b用户是role2角色,只拥有perms[student:select]资源权限。
数据库表结构和主外键关系具体如下:


Shiro与SSM框架整合,实现系统权限控制_第2张图片
image.png

在SSM框架的基础上整合Shiro功能。Shiro主要有Filter、Realm构成,主要代码文件如下:
1、配置ShiroConfiguration过滤器链,代码如下:

@Configuration
public class ShiroConfiguration {
    @Bean
    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
        System.out.println("ShiroConfiguration.shiroFilter()");
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        // 必须设置SecuritManager
        shiroFilterFactoryBean.setSecurityManager(securityManager);

        // 拦截器
        Map filterChainDefinitionMap = new LinkedHashMap();
        filterChainDefinitionMap.put("/","anon");
        filterChainDefinitionMap.put("/login","anon");
        filterChainDefinitionMap.put("/student/add", "perms[/student/add]");
        filterChainDefinitionMap.put("/student/delete", "perms[/student/delete]");
        filterChainDefinitionMap.put("/student/update", "perms[/student/update]");
        filterChainDefinitionMap.put("/student/select", "perms[/student/select]");
        // 配置退出过滤器,其中的具体代码Shiro已经替我们实现了
        filterChainDefinitionMap.put("/logout", "logout");
        // 
    
        contextConfigLocation
        classpath:config/spring-mybatis.xml
    
    
    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        encodingFilter
        /*
    
    
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
    
        org.springframework.web.util.IntrospectorCleanupListener
    
    
    
    
        SpringMVC
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:config/spring-mvc.xml
        
        1
    
    
        SpringMVC
        /
    

    
    
        shiroFilter
        org.springframework.web.filter.DelegatingFilterProxy
        
            targetFilterLifecycle
            true
        
    

    
        shiroFilter
        /*
        REQUEST
        FORWARD
        INCLUDE
        ERROR
    

    
        /WEB-INF/index.jsp
    

shiro具体使用:
1、登录方法代码如下:

    //登录
    @PostMapping(value = "/login")
    public ModelAndView login(String userName, String password){
        ModelAndView mav = new ModelAndView();
        //密码加密
        String newPassword = PasswordUtil.encodePwd(password);
        UsernamePasswordToken token = new UsernamePasswordToken(userName,newPassword);
        Subject subject = SecurityUtils.getSubject();
        try{
            subject.login(token);
            //mav.addObject("currentUser",userName);
            mav.setViewName("main");
            return mav;
        }catch (Exception e){
            e.printStackTrace();
            mav.setViewName("index");
            mav.addObject("error","用户名或密码错误!");
            return mav;
        }
    }

2、main.jsp代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName() +":"+request.getServerPort()+path+"/";
%>
<%@page isELIgnored="false" %>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>


    main.jsp


欢迎您,


只有admin角色能够看到的内容


只有role1角色能够看到的内容


只有role2角色能够看到的内容


增加用户


删除用户


修改用户


查询用户


增加学生
删除学生
修改学生
查询学生

3、结果展示


Shiro与SSM框架整合,实现系统权限控制_第3张图片
image.png

Shiro与SSM框架整合,实现系统权限控制_第4张图片
image.png

Shiro与SSM框架整合,实现系统权限控制_第5张图片
image.png

你可能感兴趣的:(Shiro与SSM框架整合,实现系统权限控制)