您好,登錄后才能下訂單哦!
前言:放假了一直在敲項目,之前敲的品優購項目,下載還沒有更新文章,其實已經做完幾個大模塊了,之所以遲遲沒有更新就是,敲著停不下來,因為寫文章實在是太費時間了,就舍不得停下來,這段時間敲的太多了,還是更新一下,當做復習吧。這次講的是SpringSecurity安全框架,可能相對比shiro來說SpringSecurity會復雜的多,更多的公司會使用shiro,因為shiro簡單易上手,基本已經滿足一般公司的安全登錄操作了。但是還是要學一下SpringSecurity的,畢竟有大廠在用,也是Spring家族中的東西。
spring security 的核心功能主要包括:
***防護 (防止偽造身份)
其核心就是一組過濾器鏈,項目啟動后將會自動配置。最核心的就是 Basic Authentication Filter 用來認證用戶的身份,一個在spring security中一種過濾器處理一種認證方式。
比如,對于username password認證過濾器來說, 會檢查是否是一個登錄請求;是否包含username 和 password (也就是該過濾器需要的一些認證信息) ;如果不滿足則放行給下一個。
下一個按照自身職責判定是否是自身需要的信息,basic的特征就是在請求頭中有 Authorization:Basic eHh5Onh5 的信息。中間可能還有更多的認證過濾器。最后一環是 FilterSecurityInterceptor,這里會判定該請求是否能進行訪問rest服務,判斷的依據是 BrowserSecurityConfig中的配置,如果被拒絕了就會拋出不同的異常(根據具體的原因)。Exception Translation Filter 會捕獲拋出的錯誤,然后根據不同的認證方式進行信息的返回提示。
注意:綠色的過濾器可以配置是否生效,其他的都不能控制。
在 src/main/resources中加入如下文件
spring-security.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" 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">
<!-- 設置頁面不登錄也可以訪問 -->
<http pattern="/login.html" security="none"></http>
<http pattern="/login_error.html" security="none"></http>
<!-- 配置頁面的攔截規則 use-expressions="false"是否啟用SPEL表達式-->
<http use-expressions="false">
<!-- 當前應乎必須屬于ROLE_USER這個角色,才可以訪問根目錄以及所屬子目錄的資源 -->
<intercept-url pattern="/**" access="ROLE_USER" />
<!-- 開啟表單登錄的功能 -->
<form-login login-page="/login.html" default-target-url="/index.html" authentication-failure-url="/login_error.html"/>
<csrf disabled="true"/>
</http>
<!-- 認證管理器 -->
<authentication-manager>
<authentication-provider>
<user-service>
<!--表示配置用戶屬于ROLE_USER并且配置用戶登陸的密碼和賬號-->
<user name="admin" password="123456" authorities="ROLE_USER"/>
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
這里的很多東西都有注解了,說一下沒有注解的標簽,form-login標簽表示配置一個登陸的功能,login-page="/login.html"表示配置我們自己登陸的頁面路徑,若是沒有配置form-login這個標簽,SpringSecurity會自動幫我們生成一個登陸的頁面,但是都不會用SpringSecurity給我們生成的登錄頁面,authentication-failure-url標示密碼或者賬號錯誤跳轉的頁面,default-target-url表示密碼或者賬號正確登陸后跳轉的頁面,<csrf disabled="true"/>表示關閉csrf
3. 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-security.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<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>
</web-app>
這個就是個Spring的配置文件而已,相信很多人都能看懂
4. 創建html頁面
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
<h2>歡迎進入進入神奇的Spring-Security世界</h2>
</body>
</html>
login_error.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>用戶名密碼錯誤</h2>
</body>
</html>
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄</title>
</head>
<body>
--歡迎登錄我的系統--
<form action="/login" method="post">
用戶名:<input name="username"><br>
密碼:<input name="password"><br>
<button>登錄</button>
</form>
</body>
</html>
注意:特別說明一下login.html中東西,里面的form表單的提交,其中name="username"和name="password"
是必須的,因為SpringSecurity中默認就是以username和password來接受的,當然這個名字也可以改,但是一般沿用它的就行了,沒必要改,然后就是form表單的提交必須是method="post",提交的動作必須是action="/login",一般不做修改。
##### 項目的目錄結構為
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122213834704.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjU1MDE3,size_16,color_FFFFFF,t_70)
### 三、測試
啟動項目,因為是war項目,所以要配置tomcat來啟動,啟動的命令直接就是tomcat7:run就行了,如圖表示啟動成功,然后直接粘貼這個url到瀏覽器進行訪問
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122214009660.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjU1MDE3,size_16,color_FFFFFF,t_70)
登陸頁面如圖所示,我們直接輸入localhost:9090/index.html是不允許的,會被重定向到login.html頁面中,如
圖所示
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122214103188.png)
然后輸入錯誤的密碼或者賬號,如圖所示,就會被重定向到錯誤的頁面,這個使我們自己配置的
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122214332813.png)
最后輸入正確的密碼和賬號,如圖所示,就會直接t跳轉到index.html頁面中
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122214505670.png)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。