1.启动Spring安全管理的配置步骤:
第一步:在web.xml文件中加入下面内容。
首先第一件事情是你需要增加下面的过滤器声明到你的web.xml
文件:
<filter>
<filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这提供了一个钩子到Spring安全的Web基础架构。你然后准备开始编辑您的应用程序方面的文件Web 安全服务的配置使用<http>元素。
第二步:在applicationContext.xml文件中加入下面的语句
下面是最少的<http>配置
<http auto-config='true'>
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
这表示,我们的应用程序希望所有的URL在都被保护,而且需要ROLE_USER权限才能访问。
注意这些拦截器<intercept-url>元素定义了针对不同的URL提供了不同的访问要求,如果有多个此类标签的话它的规则是:从上到下,最上面的最先被匹配。
如果想增加一些用户,你能定义一些测试数据在命名空间里。
<authentication-provider>
<user-service>
<user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="bob" password="bobspassword" authorities="ROLE_USER" />
</user-service>
</Authentication-provider>
</Authentication-provider>元素创建DaoAuthentication Provider bean和<user-service>元素创建一个InMemoryDaoImpl.
上面的配置定义了2个用户及他们的密码和访问规则。它也可以加载用户信息从标准的属性文件properties属性user-service
到这里整个配置结束你可以使用spring-security-samples-tutorial进行测试。
2.分析配置语法:
2.1
.auto-config标签包含那些内容
属性就如我们上面所使用的,它的简写语法如下:
<http>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login />
<anonymous />
<http-basic />
<logout />
<remember-me />
</http>
这些元素分别为表单登陆,匿名认证,基础认证,注销处理,和记住我的提供服务。他们各有特点可以用来改变其行为。
auto-config
需要 UserDetailsService
当使用auto-config没有UserDetailsService在你配置文件中将会出现一个错误(例如,如果你使用LDAP认证).这是因为当auto-config=”true”和请求一个使用了UserDetailsService方法(看remember-me章节获取更多的信息)认证机制的时候,记住我是自动启动的如果你有一个错误是由丢失UserDetailsService造成的,试着删除auto-config设置(和任何的remember-me有你的设置)
2.2.表单和基础登陆选项
大家可能会怀疑在当你被提示去登陆时登陆表单在哪里,因为我们没有被提到任何的HTML和JSP文件,事实上当我们没有明确的设置URL为登陆页面,Spring 安全管理将自动产生一个。基于这个功能,启动和使用标准值为这个URL处理提交登陆。预设的目标网址的用户将被送到广告等等, 然而,该命名空间提供了充足的支持 ,让您可以自定义这些选项,例如,如果您想提供您自己的登录页面,您可以使用:
<http auto-config='true'>
<intercept-url pattern="/login.jsp*" filters="none"/>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
</http>
请注意,您仍然可以使用auto-config。Form-login元素只是覆盖默认设置,另外请注意,我们已经增加了额外的intercept-url元素来说明,任何要求除登录页外都被安全过滤器处理。否则,请求将匹配相应的模式/ ** ,这样它就不可能进入登录页面!如果您想去使用基本身份验证,而不是表单登录,然后更改配置。
<http auto-config='true'>
<intercept-url pattern="/**" access="ROLE_USER" />
<http-basic />
</http>
基本身份验证,然后将优先考虑将用于提示登入当用户尝试访问一个受保护资源。表格登入仍然可以在此配置如果你想使用它,例如通过登录表单中嵌入另一个网页。
2.3使用其他的认证提供者
实际上你需要可扩展的用户信息来源和一些名字添加到应用程序中。您最有可能会希望您的用户信息存储在像数据库或LDAP服务器中。如果你有实现了一个自己的spring 安全org.springframework.security.userdetails.UserDetailsService接口的叫做“ myUserDetailsService ”的类在您的应用程序的中,那么你可以这种使用进行注册,这里的user-service-ref=”userDao”后面appfuse提供一个userDao来注册对应的类UserDaoHibernate
<authentication-provider user-service-ref='myUserDetailsService'/>
如果你想使用数据库,你可以使用
<Authentication-provider>
<jdbc-user-service data-source-ref="securityDataSource"/>
</Authentication-provider>
这里的“ securityDataSource ”是DataSource这种bean的名称,它指向一个数据库的标准Spring安全用户数据表。或者,您可以配置一个Spring安全的 JdbcDaoImpl bean和使用user-service-ref
属性
指向它
2.3.1增加一个密码编码器
往往你的密码资料将使用哈西算法来编码。这里支持<password-encoder>元素。使用SHA编码密码,原始的身份验证提供程序配置就像这个样子
<Authentication-provider>
<password-encoder hash="sha"/>
<user-service>
<user name="jimi" password="d7e6351eaa13189a5a3641bab846c8e8c69ba39f" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="bob" password="4e7421b1b8765d8f9406d87e7cc6aa784c4ab97f" authorities="ROLE_USER" />
</user-service>
</Authentication-provider>
或则使用sha编码密码
<authentication-provider user-service-ref="userDao">
<password-encoder ref="passwordEncoder"/>
</authentication-provider>
<bean id="passwordEncoder" class="org.springframework.security.providers.encoding.ShaPasswordEncoder"/>
当使用哈希密码,这也是一个不错的主意使用盐的价值,以防止字典攻击,Spring安全支持这一点。理想的,您可能需要为每个用户随机生成的盐值,但您可以使用的任何属性的UserDetails对象它可以加载您UserDetailsService
<password-encoder hash="sha">
<salt-source user-property="username"/>
</password-encoder>
您可以使用一个自定义的密码编码器的bean使用ref属性password-encoder.这应当包含一个bean名称中的应用方面这是一个实例,Spring安全的PasswordEncoder接口