08.关于shiro集成Spring、SpringMvc、SpringData实现remenberMe

今天写登录功能,想要实现记住我功能,然后到处找了一些,始终不够完整,于是我就自己研究了最终实现如下

1.在登录页面加入“记住我”复选框,如下

记住我

需要注意的是,这里的name,只能写为remeberMe,因为shiro内部集成了会自动获取这个字段的值,后面的value="true",这个是我自己加上去的,相当于是一个默认值,默认为记住我状态

2.后台Controller里面接收参数:

//获取当前登录主体  
Subject subject = SecurityUtils.getSubject();  
//如果当前用户还没有认证  
try {  
    //如果当前主体未认证,就开始认证  
  if (!subject.isAuthenticated()) {  
  
        //将传入的用户名和密码封装到UsernamePasswordToken  
        subject.login(token);  
        Employee employee = (Employee)  subject.getPrincipal();  
        //登录成功之后将当前用户对象放到session中去  
        SessionUtil.setUserSession(employee);  
        //记住我  
         token.setRememberMe(true);  
  }  
  
    return new AjaxResult();

需要注意的是,我做的是在这里登录成功之后,就直接就setRememberMe(true),当然,这里可以自己加判断,有if语句和三目都可以实现,基于你的需求不一样而已。

3.配置权限

我这里是自定义的map集合来动态获取数据库中的权限,以及添加新的权限请求,如果需要具体配置的方法介绍,可以留言

public class MyFilterChainDefinitionMap {  
  
    @Autowired  
    private IPermissionService permissionService;  
  
    /**  
    * 动态获取数据库中的权限  
    * @return  
    */  
    public Map createMap(){  
  
    //准备一个map集合  
    Map map = new LinkedHashMap<>();  
  
    //通过注入的IPermissionService对象来查找出所有的Permission(权限对象)  
    List permissionList = permissionService.findAll();  
  
    //循环遍历所有的Permission  
    for (Permission permission : permissionList) {  
        //在过程中,动态添加权限 --//url(=== /employee/save) 对应 sn(=== employee:save)           //ArvinPermission是自定义的过滤器  
        map.put(permission.getUrl(),"ArvinPermission["+permission.getSn()+"]");  
    }  
        //直接放行登录请求  
        map.put("/login","anon");  
  
        //这里用于对所有的静态资源进行放行  
        map.put("/static/**","anon");  
        //注销请求  
        map.put("/logout","logout");  
        //拦截所有请求,需要认证才能通行  
        //map.put("/**","authc");  
  
        // --- /** = user 表示对访问所有地址对认证过的用户进行放行  
        map.put("/**","user");  
        return map;  
  
  }  
}

在这个里面就是将原来的map.put("/**","authc"); 替换为map.put("/**","user"); ,相当于原来所有的请求都需要认证,而现在就是所有的请求对认证过的主体进行放行(不等于不需要权限访问所有链接)

4.shiro.xml配置


        
        
        
        
        

    
  
  
  
   
   
  
  
  
  
  
  
  
   
   
    
    
  
  
  
  
   
   
  
  
  
  
   
   
  
  
  
  
    
    
    
    
   
   
   
   
   

这里配置结束之后,需要再将sessionManagerrememberMeManager配置进shiro的核心对象securityManager


        
        
        
        
    

到这里,我们的记住我功能就全部实现

你可能感兴趣的:(java,javascript)