您好,登錄后才能下訂單哦!
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的配置-->
<?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源碼解析
web.xml配置文件的上圖配置的名稱是默認的不可更改
而這個filter對應的具體類是
這個類的作用是用于干嘛的呢?
這個類的父類是繼承了filter
所以這個類的具體作用應該是在doFilter中
在此中我們可以看到傳入了一個
FilterChain對象
但是這個對象又干了什么呢?
此時賦值為了本類中的此變量this.delegate; 往上看我們看到了此變量是一個Filter
以上我們看到當為空之后就調用了本類中的initDelegate進行賦值
這邊通過加載配置文件獲取Bean對象
6、FilterChainProxy實現加載所有Filter的實現類
獲取到所需要加載的所有Filter
這個SecurityFilters枚舉定義所有需要加載的Filter
通過jar包
spring-security-config-5.0.1.RELEASE.jar
可以翻出spring.handlers
相對應
這邊更具體的說明了需要加載的所有Filter
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。