1. 程式人生 > >Spring Security應用開發(04)HTTP basic認證

Spring Security應用開發(04)HTTP basic認證

角色 cati onf poi font con prop ins mode

Spring Security默認是使用form-login表單認證方式。

<!-- 默認使用表單認證 -->

<sec:form-login />

Spring Security還提供了HTTP basic認證的配置的方式,只要在http標簽中使用空的http-basic標簽即可啟用HTTP basic認證方式。

<!-- 角色和URL模式的對應關系 -->

 <sec:http auto-config="true" use-expressions="true">

 <sec:intercept-url pattern="/admin/**"
access="hasRole(‘ROLE_ADMIN‘)" /> <sec:intercept-url pattern="/user/**" access="hasRole(‘ROLE_USER‘)" /> <sec:intercept-url pattern="/home/**" access="hasRole(‘ROLE_USER‘) or hasRole(‘ROLE_ADMIN‘)" /> <!-- 使用HTTP basic認證 --> <sec:http-basic />

在需要登錄時,瀏覽器會打開HTTP basic認證對話框。

技術分享

其中服務器提示後面的文字Spring Security Application”是Spring Security默認給出的realm(領域)信息,可以在http-basic標簽中通過配置entry-point-ref屬性來指定。

<sec:http-basic  

  entry-point-ref="basicAuthenticationEntryPoint"

 />

 

需要增加一個bean然後指定名字為realmName的屬性的值為想要顯示的文字。

 <beans:bean

 id="basicAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint"> <beans:property name="realmName" value="http basic authentication by [email protected]" /> </beans:bean>

訪問一個需要登錄的頁面/home,則瀏覽器出現如下登錄畫面:

技術分享

發起請求後,會收到一個WWW-Authenticate的頭信息。響應數據如下:

HTTP/1.1 401

Cache-Control: no-cache, no-store, max-age=0, must-revalidate

Pragma: no-cache

Expires: 0

X-XSS-Protection: 1; mode=block

X-Frame-Options: DENY

X-Content-Type-Options: nosniff

Set-Cookie: JSESSIONID=E7BEB2393FB9910DFD5D4D82728AF4EB;path=/SpringSecurity;HttpOnly

WWW-Authenticate: Basic realm="http basic authentication by [email protected]"

Content-Type: text/html;charset=utf-8

Content-Language: en

Content-Length: 1110

Date: Sat, 06 May 2017 15:46:02 GMT

在看到401狀態碼和WWW-Authenticate頭信息後,瀏覽器出現登錄畫面。

如果在瀏覽器給出的身份認證畫面中輸入錯誤的用戶名和密碼, 則會繼續要求輸入正確的用戶名和密碼。

如果取消登錄,則會跳轉到認證失敗頁面。

技術分享

取消登錄後,請求和響應數據如下:

請求:

GET /SpringSecurity/home/ HTTP/1.1

Host: localhost:8080

Connection: keep-alive

Pragma: no-cache

Cache-Control: no-cache

Authorization: Basic emhhbmdzYW46MTIzNA==

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36

Referer: http://localhost:8080/SpringSecurity/

Accept-Encoding: gzip, deflate, sdch

Accept-Language: zh-CN,zh;q=0.8,en;q=0.6

Cookie: JSESSIONID=BBC492A01845324E6B28DC1CCE77CCF7

響應:

HTTP/1.1 401 OK

Cache-Control: no-cache, no-store, max-age=0, must-revalidate

Pragma: no-cache

Expires: 0

X-XSS-Protection: 1; mode=block

X-Frame-Options: DENY

X-Content-Type-Options: nosniff

WWW-Authenticate: Basic realm="http basic authentication by [email protected]"

Content-Type: text/html;charset=utf-8

Content-Language: en

Content-Length: 1030

Date: Sat, 06 May 2017 14:45:12 GMT

在登錄成功後,則需要關閉瀏覽器才能退出登錄。

Spring Security應用開發(04)HTTP basic認證