1、導(dǎo)入spring-security的jar包 或者是在maven中導(dǎo)入依賴
作者選擇的是在maven中導(dǎo)入依賴(這邊的前提是在spring項(xiàng)目中集成spring-security框架用于認(rèn)證)
用maven導(dǎo)入依賴:在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的配置-->
<?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" 不用自己編寫登陸的頁(yè)面,框架提供默認(rèn)的登陸頁(yè)面
use-expressions="false" 是否使用SPEL表達(dá)式
-->
<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">
<!--配置具體的攔截規(guī)則 patten="請(qǐng)求的路徑規(guī)則" access="訪問系統(tǒng)的人" 必須要有ROLE_USER角色-->
<security:intercept-url pattern="/" access="ROLE_USER_ADMIN"/>
<!--定義跳轉(zhuǎn)的具體的頁(yè)面-->
<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"/>
<!--關(guān)閉跨域請(qǐng)求-->
<security:csrf disabled="true"/>
<!--退出-->
<security:logout invalidate-session="true" logout-url="/logout.do" logout-success-url="/login.jsp"/>
</security:http>
c)、<!--配置數(shù)據(jù)庫(kù)中的用戶名和密碼-->
<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、創(chuàng)建自己的UserDao接口和一個(gè)繼承了UserDetailsService這個(gè)接口的UserService接口
并創(chuàng)建一個(gè)UserServiceImpl類實(shí)現(xiàn)UserService接口
a)、重寫這個(gè)方法: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;
}
和這個(gè)方法:public List<SimpleGrantedAuthority> getAuthority(List<Role> roles){
作用就是返回一個(gè)List集合,集合中裝入的是角色描述
return list;
}
5、spring-security源碼解析
web.xml配置文件的上圖配置的名稱是默認(rèn)的不可更改
而這個(gè)filter對(duì)應(yīng)的具體類是
這個(gè)類的作用是用于干嘛的呢?
這個(gè)類的父類是繼承了filter
所以這個(gè)類的具體作用應(yīng)該是在doFilter中
在此中我們可以看到傳入了一個(gè)
FilterChain對(duì)象
但是這個(gè)對(duì)象又干了什么呢?
此時(shí)賦值為了本類中的此變量this.delegate; 往上看我們看到了此變量是一個(gè)Filter
以上我們看到當(dāng)為空之后就調(diào)用了本類中的initDelegate進(jìn)行賦值
這邊通過加載配置文件獲取Bean對(duì)象
6、FilterChainProxy實(shí)現(xiàn)加載所有Filter的實(shí)現(xiàn)類
獲取到所需要加載的所有Filter
這個(gè)SecurityFilters枚舉定義所有需要加載的Filter
通過jar包
spring-security-config-5.0.1.RELEASE.jar
可以翻出spring.handlers
相對(duì)應(yīng)
這邊更具體的說明了需要加載的所有Filter
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。
本文標(biāo)題:spring-security自行理解-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://vcdvsql.cn/article14/ppsge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站策劃、App開發(fā)、網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容