Spring Security详细配置文档格式.docx

上传人:b****2 文档编号:4573898 上传时间:2023-05-03 格式:DOCX 页数:64 大小:65.56KB
下载 相关 举报
Spring Security详细配置文档格式.docx_第1页
第1页 / 共64页
Spring Security详细配置文档格式.docx_第2页
第2页 / 共64页
Spring Security详细配置文档格式.docx_第3页
第3页 / 共64页
Spring Security详细配置文档格式.docx_第4页
第4页 / 共64页
Spring Security详细配置文档格式.docx_第5页
第5页 / 共64页
Spring Security详细配置文档格式.docx_第6页
第6页 / 共64页
Spring Security详细配置文档格式.docx_第7页
第7页 / 共64页
Spring Security详细配置文档格式.docx_第8页
第8页 / 共64页
Spring Security详细配置文档格式.docx_第9页
第9页 / 共64页
Spring Security详细配置文档格式.docx_第10页
第10页 / 共64页
Spring Security详细配置文档格式.docx_第11页
第11页 / 共64页
Spring Security详细配置文档格式.docx_第12页
第12页 / 共64页
Spring Security详细配置文档格式.docx_第13页
第13页 / 共64页
Spring Security详细配置文档格式.docx_第14页
第14页 / 共64页
Spring Security详细配置文档格式.docx_第15页
第15页 / 共64页
Spring Security详细配置文档格式.docx_第16页
第16页 / 共64页
Spring Security详细配置文档格式.docx_第17页
第17页 / 共64页
Spring Security详细配置文档格式.docx_第18页
第18页 / 共64页
Spring Security详细配置文档格式.docx_第19页
第19页 / 共64页
Spring Security详细配置文档格式.docx_第20页
第20页 / 共64页
亲,该文档总共64页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Spring Security详细配置文档格式.docx

《Spring Security详细配置文档格式.docx》由会员分享,可在线阅读,更多相关《Spring Security详细配置文档格式.docx(64页珍藏版)》请在冰点文库上搜索。

Spring Security详细配置文档格式.docx

3. 

<

filter-name>

springSecurityFilterChain<

/filter-name>

4. 

filter-class>

org.springframework.web.filter.DelegatingFilterProxy<

/filter-class>

5.<

/filter>

6.<

filter-mapping>

7. 

8. 

url-pattern>

/*<

/url-pattern>

9.<

/filter-mapping>

--SpringsecurityFilter-->

<

这个Filter会拦截所有的URL请求,并且对这些URL请求进行SpringSecurity的验证。

注意,springSecurityFilterChain这个名称是由命名空间默认创建的用于处理web安全的一个内部的bean的id。

所以你在你的Spring配置文件中,不应该再使用这个id作为你的bean。

与Acegi的配置不同,Acegi需要自行声明一个Spring的bean来作为Filter的实现,而使用SpringSecurity后,无需再额外定义bean,而是使用<

http>

元素进行配置。

2.使用最小的<

配置

http 

auto-config='

true'

>

2. 

intercept-url 

pattern="

/**"

access="

ROLE_USER"

/>

3.<

/http>

httpauto-config='

intercept-urlpattern="

access="

/>

这段配置表示:

我们要保护应用程序中的所有URL,只有拥有ROLE_USER角色的用户才能访问。

你可以使用多个<

intercept-url>

元素为不同URL的集合定义不同的访问需求,它们会被归入一个有序队列中,每次取出最先匹配的一个元素使用。

所以你必须把期望使用的匹配条件放到最上边。

3.配置UserDetailsService来指定用户和权限

接下来,我们来配置一个UserDetailsService来指定用户和权限:

authentication-provider>

user-service>

user 

name="

downpour"

password="

authorities="

ROLE_USER, 

ROLE_ADMIN"

robbin"

5. 

QuakeWang"

6. 

/user-service>

/authentication-provider>

username="

password="

authorities="

ROLE_USER,ROLE_ADMIN"

在这里,downpour拥有ROLE_USER和ROLE_ADMIN的权限,robbin拥有ROLE_USER权限,QuakeWang拥有ROLE_ADMIN的权限

4.小结

有了以上的配置,你已经可以跑简单的SpringSecurity的应用了。

只不过在这里,我们还缺乏很多基本的元素,所以我们尚不能对上面的代码进行完整性测试。

如果你具备Acegi的知识,你会发现,有很多Acegi中的元素,在SpringSecurity中都没有了,这些元素包括:

表单和基本登录选项、密码编码器、Remember-Me认证等等。

接下来,我们就来详细剖析一下SpringSecurity中的这些基本元素。

剖析基本配置元素

1.有关auto-config属性

在上面用到的auto-config属性,其实是下面这些配置的缩写:

form-login 

anonymous 

http-basic 

logout 

remember-me 

8.<

form-login/>

anonymous/>

http-basic/>

logout/>

remember-me/>

这些元素分别与登录认证,匿名认证,基本认证,注销处理和remember-me对应。

他们拥有各自的属性,可以改变他们的具体行为。

这样,我们在Acegi中所熟悉的元素又浮现在我们的面前。

只是在这里,我们使用的是命名空间而已。

2.与Acegi的比较

我们仔细观察一下没有auto-config的那段XML配置,是不是熟悉多了?

让我们来将基于命名空间的配置与传统的Acegi的bean的配置做一个比较,我们会发现以下的区别:

1)基于命名空间的配置更加简洁,可维护性更强

例如,基于命名空间进行登录认证的配置代码,可能像这样:

login-page="

/login.jsp"

authentication-failure-url="

/login.jsp?

error=true"

default-target-url="

/work"

form-loginlogin-page="

authentication-failure-url="

default-target-url="

如果使用老的Acegi的Bean的定义方式,可能像这样:

bean 

id="

authenticationProcessingFilter"

class="

org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"

property 

authenticationManager"

ref="

authenticationFailureUrl"

value="

error=1"

defaultTargetUrl"

filterProcessesUrl"

9. 

/j_acegi_security_check"

10. 

rememberMeServices"

11.<

/bean>

beanid="

class="

propertyname="

ref="

value="

value="

ref="

这样的例子很多,有兴趣的读者可以一一进行比较。

2)基于命名空间的配置,我们无需再担心由于过滤器链的顺序而导致的错误

以前,Acegi在缺乏默认内置配置的情况下,你需要自己来定义所有的bean,并指定这些bean在过滤器链中的顺序。

一旦顺序错了,很容易发生错误。

而现在,过滤器链的顺序被默认指定,你不需要在担心由于顺序的错误而导致的错误。

3.过滤器链在哪里

到目前为止,我们都还没有讨论过整个SpringSecurity的核心部分:

过滤器链。

在原本Acegi的配置中,我们大概是这样配置我们的过滤器链的:

filterChainProxy"

org.acegisecurity.util.FilterChainProxy"

filterInvocationDefinitionSource"

value>

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 

PATTERN_TYPE_APACHE_ANT 

 

/common/**=#NONE# 

/css/**=#NONE# 

/images/**=#NONE# 

/js/**=#NONE# 

11. 

/login.jsp=#NONE# 

12. 

/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,exceptionTranslationFilter,filterSecurityInterceptor 

13. 

/value>

14. 

/property>

15.<

<

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

PATTERN_TYPE_APACHE_ANT

/common/**=#NONE#

/css/**=#NONE#

/images/**=#NONE#

/js/**=#NONE#

/login.jsp=#NONE#

/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,exceptionTranslationFilter,filterSecurityInterceptor

其中,每个过滤器链都将对应于Spring配置文件中的bean的id。

现在,在SpringSecurity中,我们将看不到这些配置,这些配置都被内置在<

节点中。

让我们来看看这些默认的,已经被内置的过滤器:

这些过滤器已经被Spring容器默认内置注册,这也就是我们不再需要在配置文件中定义那么多bean的原因。

同时,过滤器顺序在使用命名空间的时候是被严格执行的。

它们在初始化的时候就预先被排好序。

不仅如此,SpringSecurity规定,你不能替换那些<

元素自己使用而创建出的过滤器,比如HttpSessionContextIntegrationFilter,ExceptionTranslationFilter或FilterSecurityInterceptor。

当然,这样的规定是否合理,有待进一步讨论。

因为实际上在很多时候,我们希望覆盖过滤器链中的某个过滤器的默认行为。

而SpringSecurity的这种规定在一定程度上限制了我们的行为。

不过SpringSecurity允许你把你自己的过滤器添加到队列中,使用custom-filter元素,并且指定你的过滤器应该出现的位置:

beans:

myFilter"

com.mycompany.MySpecialAuthenticationFilter"

custom-filter 

position="

AUTHENTICATION_PROCESSING_FILTER"

/beans:

bean>

class="

custom-filterposition="

不仅如此,你还可以使用after或before属性,如果你想把你的过滤器添加到队列中另一个过滤器的前面或后面。

可以分别在position属性使用"

FIRST"

或"

LAST"

来指定你想让你的过滤器出现在队列元素的前面或后面。

这个特性或许能够在一定程度上弥补SpringSecurity的死板规定,而在之后的应用中,我也会把它作为切入点,对资源进行管理。

另外,我需要补充一点的是,对于在http/intercept-url中没有进行定义的URL,将会默认使用系统内置的过滤器链进行权限认证。

所以,你并不需要在http/intercept-url中额外定义一个类似/**的匹配规则。

使用数据库对用户和权限进行管理

一般来说,我们都有使用数据库对用户和权限进行管理的需求,而不会把用户写死在配置文件里。

所以,我们接下来就重点讨论使用数据库对用户和权限进行管理的方法。

用户和权限的关系设计

在此之前,我们首先需要讨论一下用户(User)和权限(Role)之间的关系。

SpringSecurity在默认情况下,把这两者当作一对多的关系进行处理。

所以,在SpringSecurity中对这两个对象所采用的表结构关系大概像这样:

Java代码

1.CREATE 

TABLE 

users 

( 

username 

VARCHAR(50) 

NOT 

NULL 

PRIMARY 

KEY, 

password 

NULL, 

enabled 

BIT 

NULL 

5.);

7.CREATE 

authorities 

authority 

10.);

CREATETABLEusers(

usernameVARCHAR(50)NOTNULLPRIMARYKEY,

passwordVARCHAR(50)NOTNULL,

enabledBITNOTNULL

);

CREATETABLEauthorities(

usernameVARCHAR(50)NOTNULL,

authorityVARCHAR(50)NOTNULL

不过这种设计方式在实际生产环境中基本上不会采用。

一般来说,我们会使用逻辑主键ID来标示每个User和每个Authorities(Role)。

而且从典型意义上讲,他们之间是一个多对多的关系,我们会采用3张表来表示,下面是我在MySQL中建立的3张表的schema示例:

`user` 

`id` 

int(11) 

auto_increment, 

`name` 

varchar(255) 

default 

`password` 

`disabled` 

int

(1) 

KEY 

(`id`) 

7.) 

ENGINE=InnoDB 

DEFAULT 

CHARSET=utf8;

9.CREATE 

`role` 

13.) 

15.CREATE 

`user_role` 

16. 

`user_id` 

17. 

`role_id` 

18. 

(`user_id`,`role_id`), 

19. 

UNIQUE 

(`role_id`), 

20. 

`FK143BF46AF6AD4381` 

(`user_id`), 

21. 

`FK143BF46A51827FA1` 

22. 

CONSTRAINT 

FOREIGN 

(`role_id`) 

REFERENCES 

(`id`), 

23.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2