SpringSecurity入門(mén)到實(shí)戰(zhàn)-創(chuàng)新互聯(lián)

前言:放假了一直在敲項(xiàng)目,之前敲的品優(yōu)購(gòu)項(xiàng)目,下載還沒(méi)有更新文章,其實(shí)已經(jīng)做完幾個(gè)大模塊了,之所以遲遲沒(méi)有更新就是,敲著停不下來(lái),因?yàn)閷?xiě)文章實(shí)在是太費(fèi)時(shí)間了,就舍不得停下來(lái),這段時(shí)間敲的太多了,還是更新一下,當(dāng)做復(fù)習(xí)吧。這次講的是SpringSecurity安全框架,可能相對(duì)比shiro來(lái)說(shuō)SpringSecurity會(huì)復(fù)雜的多,更多的公司會(huì)使用shiro,因?yàn)閟hiro簡(jiǎn)單易上手,基本已經(jīng)滿(mǎn)足一般公司的安全登錄操作了。但是還是要學(xué)一下SpringSecurity的,畢竟有大廠在用,也是Spring家族中的東西。

成都創(chuàng)新互聯(lián)公司于2013年成立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元崇州做網(wǎng)站,已為上家服務(wù),為崇州各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

一、spring security 簡(jiǎn)介

spring security 的核心功能主要包括:

  • 認(rèn)證 (你是誰(shuí))
  • 授權(quán) (你能干什么)
  • ***防護(hù) (防止偽造身份)

    其核心就是一組過(guò)濾器鏈,項(xiàng)目啟動(dòng)后將會(huì)自動(dòng)配置。最核心的就是 Basic Authentication Filter 用來(lái)認(rèn)證用戶(hù)的身份,一個(gè)在spring security中一種過(guò)濾器處理一種認(rèn)證方式。
    SpringSecurity入門(mén)到實(shí)戰(zhàn)

比如,對(duì)于username password認(rèn)證過(guò)濾器來(lái)說(shuō), 會(huì)檢查是否是一個(gè)登錄請(qǐng)求;是否包含username 和 password (也就是該過(guò)濾器需要的一些認(rèn)證信息) ;如果不滿(mǎn)足則放行給下一個(gè)。

下一個(gè)按照自身職責(zé)判定是否是自身需要的信息,basic的特征就是在請(qǐng)求頭中有 Authorization:Basic eHh5Onh5 的信息。中間可能還有更多的認(rèn)證過(guò)濾器。最后一環(huán)是 FilterSecurityInterceptor,這里會(huì)判定該請(qǐng)求是否能進(jìn)行訪問(wèn)rest服務(wù),判斷的依據(jù)是 BrowserSecurityConfig中的配置,如果被拒絕了就會(huì)拋出不同的異常(根據(jù)具體的原因)。Exception Translation Filter 會(huì)捕獲拋出的錯(cuò)誤,然后根據(jù)不同的認(rèn)證方式進(jìn)行信息的返回提示。

注意:綠色的過(guò)濾器可以配置是否生效,其他的都不能控制。

二、SpringSecurity入門(mén)實(shí)戰(zhàn)

  1. 創(chuàng)建一個(gè)普通的maven工程,打包方式為war
  2. 在 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">
    
        <!-- 設(shè)置頁(yè)面不登錄也可以訪問(wèn) -->
        <http pattern="/login.html" security="none"></http>
        <http pattern="/login_error.html" security="none"></http>
    
        <!-- 配置頁(yè)面的攔截規(guī)則  use-expressions="false"是否啟用SPEL表達(dá)式-->               
        <http use-expressions="false">
        <!-- 當(dāng)前應(yīng)乎必須屬于ROLE_USER這個(gè)角色,才可以訪問(wèn)根目錄以及所屬子目錄的資源 -->
            <intercept-url pattern="/**" access="ROLE_USER" />
            <!-- 開(kāi)啟表單登錄的功能 -->
            <form-login login-page="/login.html" default-target-url="/index.html" authentication-failure-url="/login_error.html"/>
            <csrf disabled="true"/>
        </http>
    
        <!-- 認(rèn)證管理器 -->
        <authentication-manager>
            <authentication-provider>
                <user-service>
                   <!--表示配置用戶(hù)屬于ROLE_USER并且配置用戶(hù)登陸的密碼和賬號(hào)-->
                    <user name="admin" password="123456" authorities="ROLE_USER"/>
                </user-service>
            </authentication-provider>
        </authentication-manager>

</beans:beans>

這里的很多東西都有注解了,說(shuō)一下沒(méi)有注解的標(biāo)簽,form-login標(biāo)簽表示配置一個(gè)登陸的功能,login-page="/login.html"表示配置我們自己登陸的頁(yè)面路徑,若是沒(méi)有配置form-login這個(gè)標(biāo)簽,SpringSecurity會(huì)自動(dòng)幫我們生成一個(gè)登陸的頁(yè)面,但是都不會(huì)用SpringSecurity給我們生成的登錄頁(yè)面,authentication-failure-url標(biāo)示密碼或者賬號(hào)錯(cuò)誤跳轉(zhuǎn)的頁(yè)面,default-target-url表示密碼或者賬號(hào)正確登陸后跳轉(zhuǎn)的頁(yè)面,<csrf disabled="true"/>表示關(guān)閉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>

這個(gè)就是個(gè)Spring的配置文件而已,相信很多人都能看懂
 4. 創(chuàng)建html頁(yè)面

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首頁(yè)</title>
</head>
<body>
<h2>歡迎進(jìn)入進(jìn)入神奇的Spring-Security世界</h2>
</body>
</html>

login_error.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>用戶(hù)名密碼錯(cuò)誤</h2>
</body>
</html>

login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄</title>
</head>
<body>

--歡迎登錄我的系統(tǒng)--
<form action="/login" method="post">
用戶(hù)名:<input name="username"><br>
密碼:<input name="password"><br>
<button>登錄</button>
</form>

</body>
</html>


注意:特別說(shuō)明一下login.html中東西,里面的form表單的提交,其中name="username"和name="password"
是必須的,因?yàn)镾pringSecurity中默認(rèn)就是以u(píng)sername和password來(lái)接受的,當(dāng)然這個(gè)名字也可以改,但是一般沿用它的就行了,沒(méi)必要改,然后就是form表單的提交必須是method="post",提交的動(dòng)作必須是action="/login",一般不做修改。

 ##### 項(xiàng)目的目錄結(jié)構(gòu)為
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122213834704.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjU1MDE3,size_16,color_FFFFFF,t_70)

### 三、測(cè)試
啟動(dòng)項(xiàng)目,因?yàn)槭莣ar項(xiàng)目,所以要配置tomcat來(lái)啟動(dòng),啟動(dòng)的命令直接就是tomcat7:run就行了,如圖表示啟動(dòng)成功,然后直接粘貼這個(gè)url到瀏覽器進(jìn)行訪問(wèn)
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122214009660.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjU1MDE3,size_16,color_FFFFFF,t_70)
登陸頁(yè)面如圖所示,我們直接輸入localhost:9090/index.html是不允許的,會(huì)被重定向到login.html頁(yè)面中,如
圖所示
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122214103188.png)
然后輸入錯(cuò)誤的密碼或者賬號(hào),如圖所示,就會(huì)被重定向到錯(cuò)誤的頁(yè)面,這個(gè)使我們自己配置的
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122214332813.png)
最后輸入正確的密碼和賬號(hào),如圖所示,就會(huì)直接t跳轉(zhuǎn)到index.html頁(yè)面中
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200122214505670.png)

文章標(biāo)題:SpringSecurity入門(mén)到實(shí)戰(zhàn)-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://muchs.cn/article28/cdcecp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、企業(yè)網(wǎng)站制作做網(wǎng)站、網(wǎng)站排名、網(wǎng)頁(yè)設(shè)計(jì)公司、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管