中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

spring-security自行理解

發布時間:2020-07-15 14:07:49 來源:網絡 閱讀:219 作者:loserone 欄目:編程語言

1、導入spring-security的jar包 或者是在maven中導入依賴
作者選擇的是在maven中導入依賴(這邊的前提是在spring項目中集成spring-security框架用于認證)
用maven導入依賴:在pom.xml中配置(作者的spring是5.0+的版本)
<dependencies>

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>

</dependencies>

2、在web.xml中配置
<!-- 配置加載類路徑的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,classpath:spring-security.xml</param-value>
</context-param>

<!--springSecurity配置-->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

 <!--springSecurity的配置-->

<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、創建并配置spring-security.xml文件
開始配置

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
a)、<!--配置不攔截的資源
auto-config="true" 不用自己編寫登陸的頁面,框架提供默認的登陸頁面
use-expressions="false" 是否使用SPEL表達式
-->
<security:http pattern="/login.jsp" security="none"/>
<security:http pattern="failer.jsp" security="none"/>
<security:http pattern="/css/" security="none"/>
<security:http pattern="/images/
" security="none"/>
<security:http pattern="/img/" security="none"/>
<security:http pattern="/plugins" security="none"/>
b)、<!--配置具體的原則-->
<security:http auto-config="true" use-expressions="false">
<!--配置具體的攔截規則 patten="請求的路徑規則" access="訪問系統的人" 必須要有ROLE_USER角色-->
<security:intercept-url pattern="/
" access="ROLE_USER_ADMIN"/>

    <!--定義跳轉的具體的頁面-->
    <security:form-login
        login-page="/login.jsp"
        login-processing-url="/login.do"
        default-target-url="/index.jsp"
        authentication-failure-url="/failer.jsp"
        authentication-success-forward-url="/pages/main.jsp"/>

    <!--關閉跨域請求-->
    <security:csrf disabled="true"/>

    <!--退出-->
    <security:logout invalidate-session="true" logout-url="/logout.do" logout-success-url="/login.jsp"/>
</security:http>
c)、<!--配置數據庫中的用戶名和密碼-->
<security:authentication-manager>
    <security:authentication-provider user-service-ref="userService">
        <!--配置加密方式-->
        <security:password-encoder ref="passwordEnCoder"/>
    </security:authentication-provider>
</security:authentication-manager>

<!--配置加密的類-->
<bean id="passwordEnCoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

</beans>

結束

4、創建自己的UserDao接口和一個繼承了UserDetailsService這個接口的UserService接口
并創建一個UserServiceImpl類實現UserService接口
a)、重寫這個方法:public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
方法中處理自己的用戶封裝成UserDetails
User user = new User(userInfo.getUsername(),userInfo.getPassword(),userInfo.getStatus()==0?true:false,true,true,true,getAuthority(userInfo.getRoles()));
return user;
}
和這個方法:public List<SimpleGrantedAuthority> getAuthority(List<Role> roles){
作用就是返回一個List集合,集合中裝入的是角色描述
return list;
}
5、spring-security源碼解析
spring-security自行理解
web.xml配置文件的上圖配置的名稱是默認的不可更改
而這個filter對應的具體類是spring-security自行理解
這個類的作用是用于干嘛的呢?
這個類的父類是繼承了filter
spring-security自行理解
所以這個類的具體作用應該是在doFilter中
spring-security自行理解
在此中我們可以看到傳入了一個
spring-security自行理解
FilterChain對象
但是這個對象又干了什么呢?
spring-security自行理解
此時賦值為了本類中的此變量this.delegate; 往上看我們看到了此變量是一個Filter
spring-security自行理解

spring-security自行理解
以上我們看到當為空之后就調用了本類中的initDelegate進行賦值
spring-security自行理解
這邊通過加載配置文件獲取Bean對象
6、FilterChainProxy實現加載所有Filter的實現類
spring-security自行理解
spring-security自行理解
獲取到所需要加載的所有Filter
spring-security自行理解
spring-security自行理解
這個SecurityFilters枚舉定義所有需要加載的Filter
spring-security自行理解

通過jar包
spring-security-config-5.0.1.RELEASE.jar
可以翻出spring.handlers
spring-security自行理解
spring-security自行理解
相對應
spring-security自行理解
這邊更具體的說明了需要加載的所有Filter
spring-security自行理解
spring-security自行理解

向AI問一下細節

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

AI

南康市| 万州区| 行唐县| 西吉县| 交口县| 连城县| 邵阳市| 汉寿县| 新昌县| 宜兰县| 景东| 重庆市| 襄垣县| 乌鲁木齐市| 龙泉市| 屏东市| 紫阳县| 邹平县| 洛浦县| 公主岭市| 哈巴河县| 德安县| 蓬安县| 科技| 太保市| 邳州市| 万年县| 滕州市| 泸定县| 板桥市| 东城区| 扎鲁特旗| 宜兴市| 商城县| 桂阳县| 剑阁县| 清新县| 沾化县| 镇江市| 同德县| 浪卡子县|