在登陸用戶時,點擊記住我,從而下次登陸時能夠直接登陸
一、在SpringShiroConfig配置rememberMe對象前端
/** * 配置記住個人管理器對象 */ @Bean public RememberMeManager rememberMeManager() { CookieRememberMeManager cManager = new CookieRememberMeManager(); // 用戶信息保存在cookie中 SimpleCookie cookie = new SimpleCookie("rememberMe"); // 保存時間 cookie.setMaxAge(7 * 24 * 60 * 60); cManager.setCookie(cookie); return cManager; }
二、將rememberMe注入securityManagerapache
@Bean public org.apache.shiro.mgt.SecurityManager securityManager(Realm realm, CacheManager cacheManager, RememberMeManager rememberMeManager) { DefaultWebSecurityManager sManager = new DefaultWebSecurityManager(); // 寫完realm後把它注入給securityManager sManager.setRealm(realm); sManager.setCacheManager(cacheManager); sManager.setRememberMeManager(rememberMeManager); return sManager; }
三、Controller層添加rememberMe判斷cookie
@RequestMapping("doLogin") public JsonResult doLogin(boolean isRemember, String username, String password) { // 獲取subject對象,負責提交客戶端的帳號信息 Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(username, password); // 記住我 if (isRemember) { token.setRememberMe(true); } // 給securityManager提交用戶信息 subject.login(token); return new JsonResult("login ok"); }
四、在ShiroFilterFactoryBean中添加rememberMe登陸權限session
LinkedHashMap<String,String> map= new LinkedHashMap<>(); //靜態資源容許匿名訪問:"anon" map.put("/bower_components/**","anon"); map.put("/build/**","anon"); map.put("/dist/**","anon"); map.put("/plugins/**","anon"); map.put("/user/doLogin","anon"); map.put("/doLogout", "logout");//自動查LoginUrl //除了匿名訪問的資源,其它都要認證("authc")後訪問 map.put("/**","user"); sfBean.setFilterChainDefinitionMap(map); return sfBean; }
一、配置SpringShiroConfigapp
@Bean public SessionManager sessionManager() { DefaultWebSessionManager sManager= new DefaultWebSessionManager(); // 設置保存時間;默認是30分鐘 sManager.setGlobalSessionTimeout(60*60*1000); return sManager; }
二、注入到securityManager框架
@Bean public org.apache.shiro.mgt.SecurityManager securityManager(Realm realm, CacheManager cacheManager, RememberMeManager rememberMeManager, SessionManager sessionManager) { DefaultWebSecurityManager sManager = new DefaultWebSecurityManager(); // 寫完realm後把它注入給securityManager sManager.setRealm(realm); sManager.setCacheManager(cacheManager); sManager.setRememberMeManager(rememberMeManager); sManager.setSessionManager(sessionManager); return sManager; }
@RequestMapping("doIndexUI") public String doIndexUI(Model model) { // 從shiro框架中的session對象中取用戶 SysUser user = (SysUser)SecurityUtils.getSubject().getPrincipal(); model.addAttribute("user",user); model.addAttribute("username",user.getUsername()); return "starter"; }
登陸 admin用戶ui