Shiro使用之記住用戶、會話、顯示用戶名

Shiro使用之記住用戶、會話、顯示用戶名

image.png

在登陸用戶時,點擊記住我,從而下次登陸時能夠直接登陸

1、記住用戶

一、在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;

}

3、根據登陸用戶在頭像處顯示用戶名

  • 首先在進入系統的顯示頁面控制層添加獲取用戶信息的方法,而後藉助Modle存入域中
@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";    
}
  • 在前端頁面中顯示姓名的元素中從域中取出存入的用戶名

image.png

登陸 admin用戶
image.pngui

相關文章
相關標籤/搜索