日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring-Security (学习记录四)--配置权限过滤器,采用数据库方式获取权限

發布時間:2025/4/16 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring-Security (学习记录四)--配置权限过滤器,采用数据库方式获取权限 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1. 需要在spring-security.xml中配置驗證過濾器,來取代spring-security.xml的默認過濾器
  • 2. 配置securityMetadataSource,可以通過url來獲取角色名稱
  • 3. 配置決策器:roleAccessDecisionManager
  • 4. 在配置文件中,修改默認過濾器,將xml方式配置的權限去掉,改用數據庫
  • 5. 圖解spring-security整個流程

完整代碼見附件

1. 需要在spring-security.xml中配置驗證過濾器,來取代spring-security.xml的默認過濾器

spring-security中需要配置驗證過濾器來實現整個攔截的過程,其中需要配置一下三個來實現。

authenticationManager:在配置用戶名和角色的時候,已經配置過了。
accessDecisionManager:用來判斷url是否有權限
securityMetadataSource:可以通過url得到角色名稱

<!-- 配置 驗證過濾器, 此過濾器取代系統的XML權限過濾 , 此過濾器配置完畢之后存放到 系統缺省的過濾鏈中--> <bean id="filterSecurityInterceptor" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor"><!-- 需要認證管理器, 通過它可以獲取 管理員已經擁有的角色信息 ,由于id已經被org.springframework.security.authenticationManager默認了。不能更改,所以用別名--><property name="authenticationManager" ref="authenticationManager"></property><!-- 決策器 --><property name="accessDecisionManager" ref="roleAccessDecisionManager" /> <!-- 配置urlService ,security可以通過url得到角色名稱 --><property name="securityMetadataSource" ref="urlService" /> </bean>

2. 配置securityMetadataSource,可以通過url來獲取角色名稱

package com.hp.service.impl;import java.util.Collection; import java.util.HashSet; import java.util.Set;import javax.annotation.Resource;import org.springframework.security.access.ConfigAttribute; import org.springframework.security.web.FilterInvocation; import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource; import org.springframework.stereotype.Service;import com.hp.dao.UrlDao; import com.hp.model.Role; import com.hp.model.Url; import com.hp.service.UrlService;/*** 通過URL地址獲取相應權限然后在獲取相應的角色集合* * 需要實現FilterInvocationSecurityMetadataSource接口* * @author baojulin**/ @Service("urlService") public class UrlServiceImpl implements UrlService, FilterInvocationSecurityMetadataSource {@Resourceprivate UrlDao urlDao;@Overridepublic Url getRoleByUrl(String url) {return urlDao.getRoleByUrl(url);}/*** 此方法就是通過url地址獲取 角色信息的方法*/@Overridepublic Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {// 獲取當前的URL地址System.out.println("object的類型為:" + object.getClass());FilterInvocation filterInvocation = (FilterInvocation) object;String url = filterInvocation.getRequestUrl();System.out.println("訪問的URL地址為(包括參數):" + url);url = filterInvocation.getRequest().getServletPath();System.out.println("訪問的URL地址為:" + url);Url urlObject = getRoleByUrl(url); //調用自己實現的方法來urlSystem.out.println("urlObject:" + urlObject);if (urlObject != null && urlObject.getPrivilege() != null) {Set<Role> roles = urlObject.getPrivilege().getRoles();Collection<ConfigAttribute> c = new HashSet<ConfigAttribute>();c.addAll(roles);return c; // 將privilege中的roles改為Collection<ConfigAttribute>,role需要實現ConfigAttribute接口} else {// 如果返回為null則說明此url地址不需要相應的角色就可以訪問, 這樣Security會放行return null;}}@Overridepublic Collection<ConfigAttribute> getAllConfigAttributes() {// TODO Auto-generated method stubreturn null;}/*** 如果為真則說明支持當前格式類型,才會到上面的 getAttributes 方法中*/@Overridepublic boolean supports(Class<?> clazz) {// TODO Auto-generated method stub// 需要返回true表示支持return true;}}

urlDao中的實現

/*** 通過URL地址獲取相應權限然后在獲取相應的角色集合*/@Overridepublic Url getRoleByUrl(String url) {String hql = "FROM Url u JOIN FETCH u.privilege up JOIN FETCH up.roles WHERE u.url=:url";Session session = sessionFactory.openSession();return (Url) session.createQuery(hql).setString("url", url).uniqueResult();}

3. 配置決策器:roleAccessDecisionManager

package com.hp.service.impl;import java.util.Collection;import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.security.access.AccessDecisionManager; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.ConfigAttribute; import org.springframework.security.authentication.InsufficientAuthenticationException; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.stereotype.Service;/*** 此類是決策器: 用來對 用戶應有的角色,與URL地址可以訪問的角色進行對比,如果不匹配則拋出異常* * @author baojulin**/ @Service("roleAccessDecisionManager") public class RoleAccessDecisionManager implements AccessDecisionManager {protected final Log logger = LogFactory.getLog(RoleAccessDecisionManager.class);/*** 決策方法: 如果方法執行完畢沒有拋出異常,則說明可以放行, 否則拋出異常 AccessDeniedException*/@Overridepublic void decide(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes) throws AccessDeniedException, InsufficientAuthenticationException {// System.out.println("---------------decide------------------");// 如果登陸成功,則信息會存儲在Authorities中Collection<? extends GrantedAuthority> myRoles = authentication.getAuthorities();// 如果前面的 getAttributes() 返回非空,則返回的數據做為形參傳入, 如果返回為null 則不會進入decide() 直接放行// System.out.println("myRole:" + myRoles);// System.out.println("sysRole:" + configAttributes);for (GrantedAuthority myRole : myRoles) {// 當前登錄的角色for (ConfigAttribute urlRoles : configAttributes) {// 前臺傳入的url的角色,UrlDaoImpl.getAttributes獲得的if (myRole.getAuthority().equals(urlRoles.getAttribute())) {// 說明此URL地址符合權限,可以放行return;}}}// System.out.println("-----權限驗證失敗------");logger.error("-----權限驗證失敗------");throw new AccessDeniedException("權限越界!");}/*** 返回true表示支持*/@Overridepublic boolean supports(ConfigAttribute attribute) {// System.out.println("public boolean supports(ConfigAttribute attribute)");return true;}/*** 返回true表示支持*/@Overridepublic boolean supports(Class<?> clazz) {// System.out.println("public boolean supports(Class<?> clazz)");return true;}}

4. 在配置文件中,修改默認過濾器,將xml方式配置的權限去掉,改用數據庫

<security:http auto-config="false" use-expressions="true" access-denied-page="/login.jsp?error=access-denied-page"><!-- xml配置,配置的 pattern="/admin/**" 表示需要登錄才能訪問,而登錄的角色為ROLE_ADMIN<security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" /><security:intercept-url pattern="/user/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" /> --><!-- 增加權限過濾器,采用數據庫方式獲取權限 --><security:custom-filter ref="filterSecurityInterceptor" before="FILTER_SECURITY_INTERCEPTOR"/><!-- 默認登錄地址:j_spring_security_check --><security:form-login default-target-url="/index.jsp" username-parameter="username"password-parameter="password"authentication-failure-url="/login.jsp?error=authentication-failure-url"login-page="/login.jsp"/><!-- 注銷也是由,Security框架來實現,LogoutFilter ,默認地址j_spring_security_logout --><security:logout logout-success-url="/login.jsp"/></security:http>

5. 圖解spring-security整個流程

百度云鏈接:http://pan.baidu.com/s/1cBTdb4 密碼:pjzk

轉載于:https://www.cnblogs.com/linhp/p/5817054.html

總結

以上是生活随笔為你收集整理的Spring-Security (学习记录四)--配置权限过滤器,采用数据库方式获取权限的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本国产精品 | 久久久久久99 | 婷婷精品 | 狼人久久 | 蜜桃视频在线观看www | 国产一二三 | 久草视频免费看 | 国产精品久久777777毛茸茸 | 欧美二区在线 | 亚洲第一网址 | 国产精品有限公司 | 国语对白清晰刺激对白 | 中文视频在线 | 亚洲熟女乱色综合亚洲小说 | 中文字幕视频在线播放 | 韩国伦理电影免费在线 | 免费看一级视频 | 日本熟伦人妇xxxx | 中文字幕久久精品 | 国产怡红院 | 中文字幕91视频 | 国产91在线免费 | 国产午夜激情视频 | 男人的天堂久久 | 亚洲精品亚洲人成人网 | 日本中文字幕一区二区 | 青青草公开视频 | 黄网在线看 | 美女黄18以下禁止观看 | 成人一区二区电影 | www.九色.com| 国产伦理一区 | 神宫寺奈绪一区二区三区 | 秋霞午夜网 | 国产精品免费久久久 | 久久一区二区视频 | 每日在线观看av | caoporn人人| 激情久久中文字幕 | 国模无码一区二区三区 | 日本美女毛片 | 日本乱淫视频 | 成年人看的免费视频 | 2020av视频| 国产污污在线观看 | 尤物在线| 国产一级在线免费观看 | 国产精品入口日韩视频大尺度 | 天堂资源网 | jizzjizz日本人| 久久久久久久性 | 啪啪.com| 久久对白| 97超碰资源总站 | 久久福利免费视频 | 国产精品羞羞答答在线 | 色狠狠一区二区三区香蕉 | 中文精品久久 | 99激情| 日本视频www| 操比网站 | 国产亚洲色婷婷久久99精品91 | 日韩少妇精品 | 日韩黄色一级视频 | 日本丰满少妇一区二区三区 | 超碰97自拍 | 非洲一级黄色片 | 欧美在线 | 狠狠干天天爱 | 久久精品国产久精国产 | wwwwww在线观看| 日本欧美一级片 | 欧美精品手机在线 | av在线不卡免费观看 | 欧美三日本三级少妇三级99观看视频 | 一级黄色a毛片 | 欧美最猛黑人xxxx黑人猛交 | 美女黄色在线观看 | 亚洲午夜精品一区二区三区 | 亚洲精品一线二线三线 | 999国产精品亚洲77777 | 三级影片在线播放 | 免看一级片 | 美女黄色一级片 | 肥老熟妇伦子伦456视频 | 国产男女视频 | 久久午夜国产 | 骚虎视频最新网址 | 全黄性高潮 | 中文字幕中文在线 | 大屁股白浆一区二区 | 成人一区二区免费视频 | 亚洲熟妇av乱码在线观看 | caoporen超碰 | 精品国产AV色欲天媒传媒 | 国产精品久久久久久久无码 | 成人欧美一区二区三区小说 | 亚洲素人在线 | 牛牛精品一区 |