lrkgithub / Spring-Security-Reference-CN

8 stars 4 forks source link

5 Sample Application #3

Open lrkgithub opened 5 years ago

lrkgithub commented 5 years ago

5. 示例程序

在源代码中包含了一些示例程序。你可以在 samples/xml 的子文件夹地下找到。

本章提到的所有路径都与项目源码目录对应。

5.1 教程示例

这个教程示例是一个不错的基础示例,帮助你开始学习。它通篇使用命名空间配置。编译后的应用包含在发布的 zip 文件中,方便部署在你的 web 容器中(spring-security-samples-tutorial-3.1.x.war)。基于表单的认证和通常使用的 remember-me 认证一起使用,以使用cookies自动记住登录。

我们建议你从教程示例开始,因为 XML 比较简单,容易学习。最重要的是,你可以简单地将这个 XML 文件(以及相关的 web.xml 项目)加入到你的已有项目中。只有当基础的集成完成之后,我们才建议你尝试着增加方法授权或者领域对象安全。

5.2 联系人

这个 Contacts Sample 是一个高级示例,它有着比基础应用安全之外的,强大的领域对象访问控制列表功能 (ACLs) 。这个示例提供了一个接口,用户可以通过这个接口来控制一个简单的联系人数据库(领域对象)。

为了部署,简答地从 Spring Security 发布项目中拷贝 WAR 文件到你的容器的 webapps 目录。这个 war 应该被命名为 spring-security-samples-contacts-3.1.x.war (后面的 x 版本号根据使用的版本会有所不同)。

在启动你的容器之后,检查你应用是否加载。访问 http://localhost:8080/contacts (或者其他 URL 适用你的 web 容器和你部署的 WAR)。

接下来,点击 “DEBUG”。你就会被提示需要进行身份验证,一系列建议的用户名和密码在这个页面上。使用其中的一对进行简单地认证,然后查看结果页面。它应该包含认证成功的信息,类似于如下:

Security Debug Information

Authentication object is of type:
org.springframework.security.authentication.UsernamePasswordAuthenticationToken

Authentication object as a String:

org.springframework.security.authentication.UsernamePasswordAuthenticationToken@1f127853:
Principal: org.springframework.security.core.userdetails.User@b07ed00: Username: rod; \
Password: [PROTECTED]; Enabled: true; AccountNonExpired: true;
credentialsNonExpired: true; AccountNonLocked: true; \
Granted Authorities: ROLE_SUPERVISOR, ROLE_USER; \
Password: [PROTECTED]; Authenticated: true; \
Details: org.springframework.security.web.authentication.WebAuthenticationDetails@0: \
RemoteIpAddress: 127.0.0.1; SessionId: 8fkp8t83ohar; \
Granted Authorities: ROLE_SUPERVISOR, ROLE_USER

Authentication object holds the following granted authorities:

ROLE_SUPERVISOR (getAuthority(): ROLE_SUPERVISOR)
ROLE_USER (getAuthority(): ROLE_USER)

Success! Your web filters appear to be properly configured!

一旦你成功地收到以上信息,回到示例程序的主页面,并点击 “Manage” 按钮。然后你可以试用一下这个应用。请注意,对当前登录用户唯一可见的联系人信息已经显示,并且,只有 ROLE_SUPERVISOR 的用户有权限去删除他们的联系人。在这个场景背后,是 MethodSecurityInterceptor 在保护业务对象。

这个应用允许你去修改不同联系人的访问控制列表。确保尝试一下,并且通过回顾应用上下文的 XML 文件来理解它是怎么工作的。

5.3 LDAP 示例

lrkgithub commented 5 years ago

5.3 LDAP 示例

LDAP 示例程序提供了基础的配置,并且在同一份应用上下文文件中,使用两种配置方式,一种是命名空间配置方式,另一种是相同配置的传统 bean 配置方式。这意味着这个应用里实际有两份相同的认证提供者配置。

5.4 OpenID 示例

OpenID示例演示了怎样使用命名空间来配置OpenID,怎样为 Google, Yahoo 和 MyOpenID 认证提供者设置 attribute exchange 配置(也可以尝试其他的提供者,如果你喜欢的话)。这个示例使用了基于 JQuery 的 openid-selector 项目来提供使用者友好型登录页面,这允许使用者简单的选择一个提供者,而不是输出全部的 OpenID 认证。

这个应用与众不同的地方是,它允许任何用户访问站点(只要通过身份认证)。第一次你登录,你会得到一个 "Welcome [your name]" 信息。如果你登出有登录(使用相同的身份认证),那么它会显示 "Welcome Back" 。这是通过 UserDetailsService 来完成的,给每一个用户分配一个标准角色并存储在内部的 map 中。显然,一个真正的应用应该使用一个数据库来替代。通过阅读源码可以获取更多的信息。这个类好考虑了如下情况,不同的提供者返回不同的属性信息,并构建指向相应用户的名称。

5.5 CAS 示例

这个 CAS 示例程序需要你一起运行 CAS 服务端和 CAS 客户端。这不包含在发布的内容中,所以你应该查看项目介绍中描述的项目代码。在 samples/cas 目录下,你可以找到相关文件。这里还有一个 Readme.txt 文件,解释了如何直接从代码树里,一起运行服务端和客户端,带着 SSL 支持。

5.6 JAAS 示例

JAAS 示例程序是个十分简单的程序,展示了如何在 Spring Security 中使用 JAAS LoginModule。如果用户名和密码验证通过, LoginModule 会成功认证一个用户,否则,就会抛出 LoginException 异常。这个项目中使用的 AuthorityGranter 总是赋予用户 ROLE_USER 角色。这个示例程序还演示了如何通过设置 jaas-api-provision 为 true ,将 LoginModule 返回的 JAAS Subject 作为主题运行。

5.7 Pre-Authentication 示例

这个示例程序展示了如何把 pre-authentication 框架中的 beans 连接起来,以使用 Java EE 容器中的登录信息。用户的名字和角色是容器设置的。

代码在 samples/preauth