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

在登录成功后,则需要关闭浏览器才能退出登录。

时间: 2024-12-28 04:04:16

Spring Security应用开发(04)HTTP basic认证的相关文章

springboot集成spring security实现restful风格的登录认证 附代码

一.文章简介 本文简要介绍了spring security的基本原理和实现,并基于springboot整合了spring security实现了基于数据库管理的用户的登录和登出,登录过程实现了验证码的校验功能. 完整代码地址:https://github.com/Dreamshf/spring-security.git 二.spring security框架简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.主要包括:用户认证

Spring Security应用开发(05)自定义表单认证

Spring Security自动产生的登录页面非常简陋,但是Spring Security提供了丰富的自定义功能. 1.1.1. 密码摘要处理 数据库中的密码字段可以使用SHA摘要算法处理后再保存,而不是以明文保存. mysql> select * from users; +----------+----------+---------+ | username | password | enabled | +----------+----------+---------+ | lisi | 1

Spring Security OAuth2 开发指南。

官方原文:http://projects.spring.io/spring-security-oauth/docs/oauth2.html 翻译及修改补充:Alex Liao. Spring OAuth2.0 提供者实现原理: Spring OAuth2.0提供者实际上分为: 授权服务 Authorization Service. 资源服务 Resource Service. 虽然这两个提供者有时候可能存在同一个应用程序中,但在Spring Security OAuth中你可以把 他它们各自放在

Spring Security应用开发(11) 并发控制之实践

本文分别介绍了四种不同情况下,Spring Security的Session管理和并发控制的不同配置的配置方法,以及所产生的效果. (1)首先编写了session_error.jsp页面,用于展示session相关错误信息. 错误信息通过页面参数id传入. <p>Session Error:${param.id }</p> <p>${SPRING_SECURITY_LAST_EXCEPTION.message}</p> (2)编写相应的SessionCont

Spring Security应用开发(16)基于表达式的访问控制

1.1.1. 通用表达式 Spring Security 使用基于Spring EL的表达式来进行访问控制.内置的表达式如下表所示: 表达式 描述 hasRole(role) 当前主体(principal)是否支持role角色.支持则返回true hasAnyRole(role1,role2) 当前主体是否支持role1,role2中的任意一个角色. hasAuthority(authority) 跟hasRole(role)相似. hasAnyAuthority(authority1,auth

Spring Security应用开发(14) 重要概念之授权相关概念

1.1.1. Secure Object Secure Object指的是一个Method Invovation 或者一个URL资源. 1.1.2. GrantedAuthority GrantedAuthority用于表达指定的用户获得的权限(即角色名称). public interface GrantedAuthority extends Serializable { //返回一个表达已经经过授权的字符串. //如果不符合授权条件则返回null. String getAuthority();

Spring Security应用开发(15)层次化角色体系

1.1. 层次化角色体系 使用Spring Security的层次化角色体系,可以简化复杂角色的配置.配置过程如下: (1)首先需要在http结点中指定访问决策管理器. <!-- 角色和URL模式的对应关系 access-decision-manager-ref:指定使用的访问决策管理器. --> <sec:http auto-config="true" use-expressions="true" access-decision-manager-

Spring Security应用开发(02)基于XML配置的用户登录

1.1. 基于XML配置的登录功能 经过一系列配置之后,可以使用Spring Security内置功能实现最基本的用户登录功能以及角色验证功能,这种内置的功能没有任何实用价值,仅仅用于了解Spring Security的工作方式. (1)配置web.xml. 主要是为Spring MVC和Spring Security提供一些入口,以便有机会进行Spring MVC以及Spring Security的初始化和过滤处理等工作. <servlet> <servlet-name>spri

Spring Security应用开发(09)密码错误次数限制

实现登录时密码错误次数限制功能,就是在登录界面中当用户提交了错误的密码时在数据库中记录下这个错误次数,直到错误次数达到指定次数时,锁定用户账户,此时即便输入正确的密码,也不能登录. 需要完成如下工作: (1)修改用户表users的结构,增加相关字段. (2)自定义实现UserDetailsService,用于加载额外的数据字段. (3)自定义实现AuthenticationProvider,用于捕获登录成功和失败的事件. (3)修改spring-security.xml文件,配置上述(2)和(3