SSM+Shiro+用户登录授权

SSM与整合Shiro进行整合实现用户登录验证及权限分配

在前面的学习过程中,已经学习了 Shiro的一些基本组件以及如何利用Shiro进行权限控制。下面学习用目前比较主流的SSM框架来整合Shiro框架,将我们前面学习的一些基本知识运用到实际项目之中。由于本人初学,内容可能比较粗浅,后期进行深入理解后会细化,SSM项目的搭建过程这里不再叙述,可查阅其他人教程学习,可能有时间也会进行回顾记录。

为方便对下述内容进行理解,先画了一个流程图进行辅助

SSM+Shiro+用户登录授权_第1张图片

第一步项目配置文件(项目常规操作)

1.spring-config.xml



    
    
        
    

   
      
    
    
         
    
       
       
       
       
    
    
        
        
        
          
          
          
          
          
        
        
        
        
    
     
    
        
            
            
            
            
            
        
    

    
    
        
        
    
          
    
    
    
        
    
    
        
        
    
    
    
    
    
        
    
    
	
	
	
    
        
        
        
        
        
            
                /login=anon
                /gologin=anon
                /index = authc
                /role=authc,roles[admin]
                /menu/** = authc,roles[admin,test]
            
        
        
           
             
               
             
           
        
    

    
   
   
       
        
   

申明自定的数据源,在进行登录验证的时候将会从自定义的数据源里进行查找

2. 从Controller从前台接受到邮箱和密码调用Service

SSM+Shiro+用户登录授权_第2张图片

2.Service对Controller传过来的请求进行处理

SSM+Shiro+用户登录授权_第3张图片

 自定义MyShiroRealm继承AuthorizingRealm(用户认证及授权)

SSM+Shiro+用户登录授权_第4张图片

 此图借用他人的,若侵权联系  删

SSM+Shiro+用户登录授权_第5张图片 

 好了,到这里就已经完成了一个shiro框架对用户信息登录认证的过程。

接下来来看看授权的过程

在授权发方法中

@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		System.out.println("进入授权方法,进行授权");
		SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
		User user = (User) principals.getPrimaryPrincipal();
        //获取用户的角色及角色的模块
        Set roles = user.getRoles();//通过用户查到用户角色
        for (Role role : roles) {//遍历数据
        Set modules = role.getModules();//通过用户查到用户模块
        for (Module module : modules) {
        info.addStringPermission(module.getCpermission());
     //通过用户模块查到模块名并添加到info中。也就是说把查到的模块显示到页面中,没有的就代表没授权
    }
    return list;
}

前台页面会通过shiro标签进行判断是否有相应权限并进行显示 

<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro" %>

 //要想使用shiro的标签就一点要导数据标签

SSM+Shiro+用户登录授权_第6张图片

举例:

//shiro:hasPermission:拥有权限的资源  name:权限访问的名字,如上:当该用户里有部门管理权限时,才会让其看到部门管理这个按钮

 

  • menu底下的菜单
  • 注意:以上方法可以使用户看不到自己没有权限的数据,但是如果用户自己写链接还是能访问到数据的

    1.配置过滤器

     
           
           
           
           
           
               
                    /login=anon
                    /gologin=anon
                    /index = authc
                    /role=authc,roles[admin]
                    /menu/** = authc,roles[admin,test]
               

           

           
               
                 
                   
                 

               

           

       

    此处,我是使用的自定义的过滤器,如没有必要自定义的话使用org.apache.shiro.web.filter.authc.FormAuthenticationFilter可查阅文档,看如何实现,不再陈述。

    2.使用注解方式(别忘了配置文件配置,上面配置文件中有有注解)

    //这里代表的时要走这个方法模块中就得有角色管理这个模块,没有就拒绝访问

    @RequiresPermissions(value="menu:list")
    
        public Page findPage(Specification spec, Pageable pageable) {
    
            // TODO Auto-generated method stub
    
            return roleDao.findAll(spec, pageable);
    
        }

    到这里就完成了授权的过程,希望对你有所帮助,如有错误欢迎指出。

    你可能感兴趣的:(shiro学习记录)