Spring Security命名空间配置总结

命名空间的配置包含如下几个部分

  1. Web/HTTP安全:设置过滤器和一些用于框架验证机制的服务Bean。
  2. 业务对象的保护 : 用于security服务层。
  3. AuthenticationManager : 权限管理器。处理从框架其他部分发来的权限请求。
  4. AccessDecisionManager:认证管理器 。 provides access decisions for web and method security。 系统会注册一个默认的认证管理器。
  5. AuthenticationProviders
  6. UserDetailsService

使用命名空间(WEB)

1. 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>

用户定义beans的时候不能将其命名为springSecurityFilterChain

2. 最精简的<http>配置
<http>
    <intercept-url pattern="/**" access="hasRole('USER')" />
    <form-login />
    <logout />
</http>
  • 应用中所有的url都收到保护,需要ROLE_USER这个角色才能访问。
  • 用户使用表单进行登录,需要设计一个登出页面。
  • <intercept-url>
    pattern:访问路径
    access:访问需求
  • 可以使用多个<intercept-url>进行配置,但是系统会默认使用第一个匹配的需求,所以需要把最特殊匹配的放在最前面。

下面我们添加用户

<authentication-manager>
    <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-manager>
  • <http>元素负责创建FilterChainProxy和他所使用的过滤器beans。
  • <authentication-manager>元素创建DaoAuthenticationProvider bean。
  • <user-service>元素创建InMemoryDaoImpl。
  • 所有的<authentication-provider>元素必须是 <authentication-manager>的子元素, <authentication-manager>创建了一个ProviderManager并且为他注册authentication providers。
3. Form和基本的登录选项
<http>
    <intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page='/login.jsp' />
</http>

所有匿名用户都可以进入登录页面,其他页面只有USER角色可以进入。 AuthenticatedVoter-->查看此类源码

** 可以用以下代码来完全绕开security过滤器**

<http pattern="/css/**" security="none"/>
<http pattern="/login.jsp*" security="none"/>
<http use-expressions="false">
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page='/login.jsp' />
</http>

如果<http>元素省略了pattern属性,那么他将对所有请求有效。
如果在<http>中设置路径来绕开security过滤器,那么这些路径中的内容不能再访问当前用户信息或者安全方法,如果还想在这些路径中访问,那么可以考虑放弃将security="none",改为采用access='IS_AUTHENTICATED_ANONYMOUSLY'。

如果要使用基本用户验证来代替表单验证,可以使用如下配置

<http use-expressions="false">
    <intercept-url pattern="/**" access="ROLE_USER" />
    <http-basic />
</http>

** 设置默认登录Post的目标**

<http pattern="/login.htm*" security="none"/>
<http use-expressions="false">
    <intercept-url pattern='/**' access='ROLE_USER' />
    <form-login login-page='/login.htm' default-target-url='/home.htm' always-use-default-target='true' />
</http>
  • 如果登陆界面并不是因为用户要访问受保护资源而跳转过来的,那么用户登录成功后将进入default-target-url。
  • 如果强制用户登录成功后进入default-target-url,那么可以设置always-use-default-target='true'
  • 如果要特别细地配置登录成功后进入的目标可以通过设置 authentication-success-handlerref属性来代替 default-target-url,这个属性是类AuthenticationSuccessHandler的实例。

** 登出配置**

系统默认的登出链接是 /logout,如果想在用户登出时选择其他路径可以使用logout-url属性。

** 使用其他 Authentication Providers**

用户自定义UserDetailsService,然后实例化为 myUserDetailsService。

<authentication-manager>
    <authentication-provider user-service-ref='myUserDetailsService' />
</authentication-manager>

如果要使用数据库进行验证:

<authentication-manager>
    <authentication-provider>
        <jdbc-user-service data-source-ref="securityDataSource"/>
    </authentication-provider>
</authentication-manager>

securityDataSource是DataSource bean的实例化名字,DataSource用来管理Spring Security的标准用户数据表。
我们也可以配置一个JdbcDaoImpl,然后用user-service-ref属性来引入:

<authentication-manager>
    <authentication-provider user-service-ref='myUserDetailsService' />
</authentication-manager>
<beans:bean id="myUserDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
    <beans:property name="dataSource" ref="dataSource"/>
</beans:bean>

也可以使用标准的AuthenticationProvider:

<authentication-manager>
    <authentication-provider ref='myAuthenticationProvider' />
</authentication-manager>

myAuthenticationProvider为用户的一个bean的名字,这个bean需要实现 AuthenticationProvider接口

** 添加密码编码**

<beans:bean name="bcryptEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
<authentication-manager>
    <authentication-provider>
        <password-encoder ref="bcryptEncoder"/>
        <user-service>
            <user name="jimi" password="d7e6351eaa13189a5a3641bab846c8e8c69ba39f" authorities="ROLE_USER, ROLE_ADMIN" />
            <user name="bob" password="4e7421b1b8765d8f9406d87e7cc6aa784c4ab97f" authorities="ROLE_USER" />
        </user-service>
    </authentication-provider>
</authentication-manager>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容