使用 Spring Security 构建一个 HTTP 基本认证示例 已翻译 100%

oschina 投递于 2013/09/12 07:38 (共 2 段, 翻译完成于 09-12)
阅读 16075
收藏 141
10
加载中

HTTP基础认证(BA)是一种简单的认证机制。当一个web客户端需要保护任何web资源的时候,服务器会发送一个带有401状态码(未授权)的HTTP回应,还有类似WWW-Authenticate: Basic realm="realm here"WWW-Authenticate HTTP头。而浏览器这时候就会弹出一个登录对话框,提示输入用户名和密码。

这个示例展示了如何使用Spring Security框架配置HTTP基础认证。

在这篇文章中使用到的工具和技术有:

  1. Spring Framework 3.1.4
  2. Spring Security 3.1.4
  3. Spring Tool Suite 3.2
  4. JDK 1.6
  5. Tomcat 7

我们将修改我们前面发布的Spring Security 3 Hello World 示例,为其加入配置HTTP 基础认证的内容。

注意:HTTP基础认证并不是一个安全的用户认证方法,要是Web客户端和服务器之间的链接不安全的话。在传输的过程中,用户的认证凭据是用BASE64编码的,但没有采取加密或者散列化措施。因此如果凭据存在被截获的可能,那么绕过HTTPS的基础认证也能够被使用。

LeoXu
LeoXu
翻译于 2013/09/12 08:09
2

1. 修改Spring Security 配置

Spring Security xml配置文件中,仅仅添加<http-basic/> 就可配置HTTP基本认证。

File : WEB-INF/spring-security.xml
<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-3.2.xsd
          http://www.springframework.org/schema/security
          http://www.springframework.org/schema/security/spring-security-3.1.xsd">
 
    <http>
        <intercept-url pattern="/secured/*" access="ROLE_USER" />
         
        <!-- Adds Support for basic authentication -->
        <http-basic/>
    </http>
 
    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="srccodes" password="password" authorities="ROLE_USER" />
            </user-service>
        </authentication-provider>
    </authentication-manager>
 
</beans:beans>

2. 总体工程结构

Overall Project Structure

3. 演示

启动服务端并部署web应用。尝试打开页面http://:/spring-security-http-basic-authentication/secured/mypage.

HTTP Response Header sent by the server


HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Basic realm="Spring Security Application"
Content-Type: text/html;charset=utf-8
Content-Length: 981
Date: Mon, 09 Sep 2013 10:47:14 GMT
浏览器会打开认证对话框提示输入用户名和密码。


HTTP basic authentication dialog

对于错误的凭证,下面的认证失败的消息也会显示出来。

authentication failure message

输入正确的用户名和密码,你可以访问受保护的页面。

view the secured page
发送给服务器的HTTP 请求头部
GET /spring-security-http-basic-authentication/secured/mypage HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Cookie: JSESSIONID=896331E26095C95449516FCBF2E0E93C; __atuvc=28%7C31%2C0%7C32%2C0%7C33%2C215%7C34%2C59%7C35
Authorization: Basic c3JjY29kZXM6cGFzc3dvcmQ=
注意: 'c3JjY29kZXM6cGFzc3dvcmQ=' 是 'username:password'的BASE64的编码的版本。即 'srccodes:password'.
注意: 基本认证不提供登出功能。关闭浏览器就是登出。

 

下载源代码

spring-security-http-basic-authentication: GitHub or zip

 

引用

徐继开
徐继开
翻译于 2013/09/12 08:25
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(15)

ojjojj
ojjojj
正好在看spring security,不错学习了,
c
chuyik
由于评论的推荐,刚刚看了shiro的官方教程页面http://shiro.apache.org/10-minute-tutorial.html。虽然没有acegi强大,但很简单易用。
中华雪碧
中华雪碧

引用来自“kingdelee”的评论

引用来自“开源狂人”的评论

又说shiro了,真正用过acegi的再说那个牛逼。shiro只能说简单,苦逼用着舒服而已,从功能上说,ss领先好几条街。

ss是神马?现在spring-security在国内外都不常用么?小白请教一下

ss就是spring-security
kingdelee
kingdelee

引用来自“开源狂人”的评论

又说shiro了,真正用过acegi的再说那个牛逼。shiro只能说简单,苦逼用着舒服而已,从功能上说,ss领先好几条街。

ss是神马?现在spring-security在国内外都不常用么?小白请教一下
开源狂人
开源狂人
又说shiro了,真正用过acegi的再说那个牛逼。shiro只能说简单,苦逼用着舒服而已,从功能上说,ss领先好几条街。
lgscofield
lgscofield

引用来自“微激光”的评论

shiro更好

+1, 听说spring官网好像也用这个...
microlmj
microlmj
掉高手堆里去了……
y
ylmotol7
还是觉得shiro简单,ss的过滤器一大堆……
eechen
eechen
还是觉得用Web服务器实现跟简单,比如Nginx:
auth_basic "Authorization Required";
auth_basic_user_file /path/to/your/.htpasswd;
芋道源码
芋道源码
shiro完爆
返回顶部
顶部