Spring Security應用開發(04)HTTP basic認證
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認證