工作流程:
????當用戶向服務器發(fā)送請求時,SpringSecurity會通過過濾器,攔截SpringSecurity配置文件中設置的請求,如果設置了認證頁面則跳向自定義的認證頁面,否則跳向SpringSecurity提供的認證頁面亲族,當提交用戶名或密碼后SpringSecurity會調用設置的業(yè)務層代碼,獲取到指定的對象,然后SpringSecurity框架會自動對登錄的用戶進行密碼或權限的檢查,如果驗證通過則跳向指定的驗證成功后的頁面,否則跳向指定的驗證失敗后的頁面窖式;
SpringSecurity相關配置:
? ? 1)克握、導入SpringSecurity所依賴的jar包;
? ? ? ? ? ? 1)囚霸、spring-security-web;
? ? ? ? ? ? 2)读规、spring-security-config;
? ? 2)宜咒、配置wen.xml文件幌绍;
????????????SpringSecurity底層是通過11個過濾器組成的過濾器鏈來工作的,所以使用SpringSecurity之前需要在web.xml配置文件中添加SpringSecurity提供的過濾器實現(xiàn)類(過濾器鏈的入口):
<filter>
? ? <filter-name>springSecurityFilterChain</filter-name>
? ? <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
? ? <filter-name>springSecurityFilterChain</filter-name>
? ? <url-pattern>/*</url-pattern>
</filter-mapping>
<!--通過spring提供的監(jiān)聽器來解析SpringSecurity核心配置文件-->
<context-param>
????<param-name>contextConfigLocation</param-name>
????<param-value>classpath:spring/spring-security.xml</param-value>
</context-param>
3)修械、配置SpringSecurity核心配置文件:
? ? ? ?a)和泌、導入配置文件的依賴;
????????<beans xmlns="http://www.springframework.org/schema/beans"
? ? ? ???????????????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ????????????????? xmlns:context="http://www.springframework.org/schema/context"
? ? ????????????????? xmlns:aop="http://www.springframework.org/schema/aop"
? ????????????????? ? xmlns:tx="http://www.springframework.org/schema/tx"
? ? ? ???????????????? xmlns:mvc="http://www.springframework.org/schema/mvc"
? ? ????????????????? xmlns:security="http://www.springframework.org/schema/security"
? ? ????????????????? xsi:schemaLocation="http://www.springframework.org/schema/beans
? ? ? ? ? ? ? ? ? ? ?http://www.springframework.org/schema/beans/spring-beans.xsd
? ? ? ? ? ????? ???? http://www.springframework.org/schema/context
? ? ? ? ? ????????? http://www.springframework.org/schema/context/spring-context.xsd
? ? ? ? ? ? ???????? http://www.springframework.org/schema/aop
? ? ? ? ? ????????? http://www.springframework.org/schema/aop/spring-aop.xsd
? ? ? ? ????????? ? http://www.springframework.org/schema/tx
? ? ? ????????? ? ? http://www.springframework.org/schema/tx/spring-tx.xsd
? ? ? ? ? ? ? ? ? ? http://www.springframework.org/schema/mvc
? ? ? ????????? ? ? http://www.springframework.org/schema/mvc/spring-mvc.xsd
? ? ? ? ? ????????? http://www.springframework.org/schema/security
? ? ? ? ????????? ? http://www.springframework.org/schema/security/spring-security.xsd">
</beans>
????b)祠肥、釋放對靜態(tài)資源攔截或指定文件的攔截
<security:http pattern="/login.jsp" security="none"/>
<security:http pattern="/failer.jsp" security="none"/>
<security:http pattern="/css/**" security="none"/>
<security:http pattern="/img/**" security="none"/>
<security:http pattern="/plugins/**" security="none"/>
SpringSecurity主配置
<security:http auto-config="true" use-expressions="true">
? ? <!--設置所攔截的路徑武氓、對指定權限的用戶放行-->
? ? <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_ADMIN','ROLE_USER')"/>
? ? <!--登錄相關配置-->
? ? <security:form-login login-page="/login.jsp"
? ? ? ? ? ? ? ? ? ? ? ? login-processing-url="/login"<!--登錄后框架所調用的業(yè)務處理層(服務層)-->
? ? ? ? ? ? ? ? ? ? ? ? default-target-url="/index.jsp"<!--登錄成功后跳轉的頁面-->
? ? ? ? ? ? ? ? ? ? ? ? authentication-failure-url="/failer.jsp"<!--登錄失敗后跳轉的頁面-->
? ??????????????????????always-use-default-target="true"<!--登錄成功后總是跳轉到default-target-url所指定的頁面-->
/>
? ? <!--退出相關配置-->
? ? <security:logout invalidate-session="true"
? ? ? ? ? ? ? ? ? ? logout-url="/logout"<!--注銷后框架所調用的業(yè)務處理層(服務層)-->
? ? ? ? ? ? ? ? ? ? logout-success-url="/login.jsp"/>
? ? <!--關閉csrf攔截-->
? ? <security:csrf disabled="true"/>
</security:http>
? ?c)梯皿、為SpringSecurity提供數(shù)據(jù)認證來源
<bean id="passwordEncode" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean>
<security:authentication-manager>
? <!--設置SpringSecurity業(yè)務處理的實現(xiàn)類對象-->
? ? <security:authentication-provider user-service-ref="userServiceImpl">
? <!--設置SpringSecurity用于加密以及用于比較原文與密文是否相同的對象實例-->?
? ? ? ? <security:password-encoder ref="passwordEncode"/>
? ? </security:authentication-provider>
</security:authentication-manager>
SpringSecurity業(yè)務層編寫步驟:
? ? 1)、實現(xiàn)UserDetailsService接口;
? ? 2)县恕、重寫loadUserByUsername方法;
? ? ? ? ? ?a)东羹、 通過傳入的username查詢數(shù)據(jù)庫獲取用戶對象;
? ? ? ? ? ?b)、驗證用戶是否存在;
? ? ? ? ? ?c)忠烛、將查詢到的用戶信息封裝到UserDetails實例中;
???????????????????該對象實例的構造方法需要傳入username属提、password、該用戶所擁有的角色名集合;
????????????????????????用戶的角色名稱需要封裝到SimpleGrantedAuthority實例中美尸;
????????????????????????然后將所有的SimpleGrantedAuthority實例封裝帶集合中,傳入UserDetails實例冤议;
? ? ? 3)、返回UserDetails對象;