91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot 2.0 開發案例之整合Shiro安全框架

發布時間:2020-08-11 12:27:06 來源:網絡 閱讀:513 作者:wx5d30212829a35 欄目:編程語言

一、前言

為了管理擼主的小黃圖,特別安排了一個后臺管理系統,權限管理當然是首選 Shiro 了。

二、表設計

至少需要以下幾張表,具體如何設計要視自己的業務而定:

  • sys_user:用戶表

  • sys_role:角色表

  • sys_menu:菜單表

  • sys_user_role:用戶對應角色

  • sys_role_menu:用戶對應菜單

三、整合

pom.xml引入:

<dependency>?<groupId>org.apache.shiro</groupId>?<artifactId>shiro-spring-boot-web-starter</artifactId>?<version>1.4.2</version></dependency>

定義 UserRealm:

/**?*?用戶認證?*/public?class?UserRealm?extends?AuthorizingRealm?{
?@Autowired?private?SysUserService?userService;
?/**?*?獲取授權?*?@param?principalCollection?*?@return?*/?@Override?protected?AuthorizationInfo?doGetAuthorizationInfo(PrincipalCollection?principalCollection)?{?Long?userId?=?ShiroUtils.getUserId();?List<String>?rolesSet?=?userService.listUserRoles(userId);?List<String>?permsSet?=?userService.listUserPerms(userId);?SimpleAuthorizationInfo?info?=?new?SimpleAuthorizationInfo();?info.setRoles(new?HashSet<>(rolesSet));?info.setStringPermissions(new?HashSet<>(permsSet));?return?info;?}
?/**?*?獲取認證?*?@param?authenticationToken?*?@return?*?@throws?AuthenticationException?*/?@Override?protected?AuthenticationInfo?doGetAuthenticationInfo(AuthenticationToken?authenticationToken)?throws?AuthenticationException?{?String?username?=?(String)?authenticationToken.getPrincipal();?String?password?=?new?String((char[])?authenticationToken.getCredentials());?SysUser?user?=?userService.getUser(username);?if?(user?==?null)?{?throw?new?UnknownAccountException("賬戶不存在");?}?if(!password.equals(user.getPassword()))?{?throw?new?IncorrectCredentialsException("密碼不正確");?}?return?new?SimpleAuthenticationInfo(user,?password,?getName());?}}

定義 ShiroConfig:

/**?*?Shiro權限配置?*/@Configurationpublic?class?ShiroConfig?{
?@Bean?public?UserRealm?userRealm()?{?return?new?UserRealm();?}
?@Bean?public?ShiroFilterFactoryBean?shiroFilterFactoryBean?(SecurityManager?securityManager)?{?ShiroFilterFactoryBean?shiroFilterFactoryBean?=?new?ShiroFilterFactoryBean();?//?必須設置SecuritManager?shiroFilterFactoryBean.setSecurityManager(securityManager);?//設置登錄頁?shiroFilterFactoryBean.setLoginUrl("/login.shtml");?//?登錄成功后要跳轉的鏈接,如果是ajax這里無效?shiroFilterFactoryBean.setSuccessUrl("/index");?//?未授權界面;?shiroFilterFactoryBean.setUnauthorizedUrl("/403");?//?攔截器?Map<String,?String>?filterChainDefinitionMap?=?new?LinkedHashMap<>();?//?過濾鏈定義,從上向下順序執行,一般將?/**放在最為下邊?//?authc:所有url都必須認證通過才可以訪問;?anon:所有url都都可以匿名訪問?/**?*?靜態文件?*/?filterChainDefinitionMap.put("/css/**","anon");?filterChainDefinitionMap.put("/images/**","anon");?filterChainDefinitionMap.put("/js/**","anon");?filterChainDefinitionMap.put("/file/**","anon");?/**?*?登錄注冊?*/?filterChainDefinitionMap.put("/register.shtml","anon");?filterChainDefinitionMap.put("/login.shtml","anon");?filterChainDefinitionMap.put("/sys/logout","anon");?filterChainDefinitionMap.put("/sys/login","anon");?filterChainDefinitionMap.put("/sys/register","anon");?/**?*?管理后臺?*/?filterChainDefinitionMap.put("/sys/**",?"roles[admin]");?filterChainDefinitionMap.put("/**",?"authc");?shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);?return?shiroFilterFactoryBean;?}
?@Bean?public?SessionsSecurityManager?securityManager()?{?DefaultWebSecurityManager?securityManager?=?new?DefaultWebSecurityManager();?securityManager.setRealm(userRealm());?securityManager.setSessionManager(sessionManager());?return?securityManager;?}?@Bean?public?DefaultWebSessionManager?sessionManager()?{?DefaultWebSessionManager?sessionManager?=?new?DefaultWebSessionManager();?//去掉小尾巴?JSESSIONID?sessionManager.setSessionIdUrlRewritingEnabled(false);?long?time?=?2*60*60*1000;?sessionManager.setGlobalSessionTimeout(time);?return?sessionManager;?}}

登錄 LoginController:

/**?*?登錄?*/@Controller@RequestMapping("/sys")public?class?LoginController?{
?private?static?final?Logger?logger?=?LoggerFactory.getLogger(LoginController.class);
?@Autowired?private?SysUserService?sysUserService;
?/**?*?登錄?*/?@PostMapping("/login")?@ResponseBody?public?Result?login(String?username,?String?password){?logger.info("用戶登錄");?try{?Subject?subject?=?ShiroUtils.getSubject();?password?=?MD5Utils.encrypt(username,?password);?UsernamePasswordToken?token?=?new?UsernamePasswordToken(username,?password);?subject.login(token);?}catch?(Exception?e)?{?e.printStackTrace();?return?Result.error("登錄失敗");?}?return?Result.ok("登錄成功");?}}

四、過濾器

shiro提供和多個默認的過濾器,我們可以用這些過濾器來配置過濾指定url的訪問權限,這里只介紹幾個比較常用的。


SpringBoot 2.0 開發案例之整合Shiro安全框架


常用的權限控制注解,可以在控制器類上使用。

SpringBoot 2.0 開發案例之整合Shiro安全框架


五、前端使用

過濾器實現了后端的權限控制訪問,那么如何在前端來使用注解實現按鈕的顯示呢?通常 thymeleaf 是 SpringBoot的標配模板了,這里我們使用第三方插件來實現。

pom.xml引入:

<dependency>?<groupId>com.github.theborakompanioni</groupId>?<artifactId>thymeleaf-extras-shiro</artifactId>?<version>2.0.0</version></dependency>

ShiroConfig 追加以下代碼:

@Beanpublic?ShiroDialect?shiroDialect(){?return?new?ShiroDialect();}

頁面頭部引入:

<!DOCTYPE?html><html?xmlns:th="http://www.thymeleaf.org"?xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">

頁面使用:

<!--?顯示登陸用戶昵稱?--><shiro:principal?property="nickname"/>
<!--?游客?--><p?shiro:guest="">Please?<a?href="login.html">login</a></p>
<!--?認證通過或已記住的用戶。--><p?shiro:user="">Welcome?back?John!?Not?John??Click?<a?href="login.html">here</a>?to?login.</p>
<!--?已認證通過的用戶。不包含已記住的用戶,這是與user標簽的區別所在。--><p?shiro:authenticated="">Hello,?<span?shiro:principal=""></span>,?how?are?you?today?</p>
<a?shiro:authenticated=""?href="updateAccount.html">Update?your?contact?information</a>
<!--?輸出當前用戶信息,通常為登錄帳號信息。--><p>Hello,?<shiro:principal/>,?how?are?you?today?</p>
<!--?未認證通過用戶,與authenticated標簽相對應。與guest標簽的區別是,該標簽包含已記住用戶。--><p?shiro:notAuthenticated="">Please?<a?href="login.html">login</a>?in?order?to?update?your?credit?card?information.</p>
<!--?驗證當前用戶是否屬于該角色。--><a?shiro:hasRole="admin"?href="admin.html">Administer?the?system</a><!--?擁有該角色?-->
<!--?與hasRole標簽邏輯相反,當用戶不屬于該角色時驗證通過。--><p?shiro:lacksRole="developer"><!--?沒有該角色?-->Sorry,?you?are?not?allowed?to?developer?the?system.</p>
<!--?驗證當前用戶是否屬于以下所有角色。--><p?shiro:hasAllRoles="developer,?2"><!--?角色與判斷?-->You?are?a?developer?and?a?admin.</p>
<!--?驗證當前用戶是否屬于以下任意一個角色。--><p?shiro:hasAnyRoles="admin,?vip,?developer,1"><!--?角色或判斷?-->You?are?a?admin,?vip,?or?developer.</p>
<!--驗證當前用戶是否擁有指定權限。--><a?shiro:hasPermission="userInfo:add"?href="createUser.html">添加用戶</a><!--?擁有權限?-->
<!--?與hasPermission標簽邏輯相反,當前用戶沒有制定權限時,驗證通過。--><p?shiro:lacksPermission="userInfo:del"><!--?沒有權限?-->Sorry,?you?are?not?allowed?to?delete?user?accounts.</p>
<!--?驗證當前用戶是否擁有以下所有角色。--><p?shiro:hasAllPermissions="userInfo:view,?userInfo:add"><!--?權限與判斷?-->You?can?see?or?add?users.</p>
<!--?驗證當前用戶是否擁有以下任意一個權限。--><p?shiro:hasAnyPermissions="userInfo:view,?userInfo:del"><!--?權限或判斷?-->You?can?see?or?delete?users.</p><a?shiro:hasPermission="pp"?href="createUser.html">Create?a?new?User</a>

六、小結

SpringBoot 2.0 開發案例之整合Shiro安全框架



SpringBoot 2.0 開發案例之整合Shiro安全框架


小黃圖終于有后臺了!!!


讀者福利

加微信:haolagui521備注51CTO領取附送學習進階架構資料、PDF書籍文檔、面試資料

SpringBoot 2.0 開發案例之整合Shiro安全框架

SpringBoot 2.0 開發案例之整合Shiro安全框架


SpringBoot 2.0 開發案例之整合Shiro安全框架SpringBoot 2.0 開發案例之整合Shiro安全框架


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳春市| 苍溪县| 本溪| 鸡西市| 淮阳县| 鹤山市| 托克逊县| 白河县| 华容县| 霞浦县| 互助| 木里| 百色市| 兴安县| 宁强县| 福清市| 白玉县| 社会| 萍乡市| 伊宁县| 沁阳市| 库车县| 行唐县| 奉化市| 黄冈市| 安阳市| 东兰县| 西平县| 嘉禾县| 常州市| 舟山市| 萝北县| 嘉荫县| 澎湖县| 都江堰市| 鄱阳县| 大安市| 安远县| 麦盖提县| 象州县| 敖汉旗|