spring security 初次涉猎三

今天我们就来学习spring security 的配置文件applicationContext-security.xml文件

----------------------3小时完成-----------------------------------

要做的事:学会在web.xml文件中配置,学会applicationContext-security.xml文件配置

1、掌握配置文件运行原理。

2、学会在web.xml文件中配置spring security文件。

3、学会applicationContext-security.xml文件中的配置标签。

-------------------------------------------------------------------------

第一步,掌握配置文件运行原理。要知道配置文件是干什么用的,什么时候被用到。在java框架中的配置文件,是初始化数据使用的。是在程序一开始就被用到。配置文件web.xml是被tomcat容器加载的,而tomcat就相当于一个代理类。applicationContext-security.xml是通过web.xml作为入口初始化spring security的入口的。

第二步,学会在web.xml文件中配置spring security文件。这个配置文件就是applicationContext-security.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>

注意filter-name一定要写成springSecurityFilterChain。在DelegatingFilterProxy类init时,会获取filter-name,然后通过filter-name去spring中获取代理的bean。DelegatingFilterProxy是代理授权过滤器。而spring-security的配置是由HttpSecurityBeanDefinitionParser解析器解析,每一个http都会被解析成一个SecurityFilterChain都添加到FilterChainProxy中的filterChains中。而且该FilterChainProxy会以springSecurityFilterChain注册得到spring的bean中。

    <http realm="Contacts Realm">
        <intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/index.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/hello.htm" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/switchuser.jsp" access="ROLE_SUPERVISOR"/>
        <intercept-url pattern="/j_spring_security_switch_user" access="ROLE_SUPERVISOR"/>
        <intercept-url pattern="/**" access="ROLE_USER"/>


        <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1"/>
        <http-basic/>
        <logout logout-success-url="/index.jsp"/>
        <remember-me />
        <custom-filter ref="switchUserProcessingFilter" position="SWITCH_USER_FILTER"/>
    </http>

说明:

access后接用户角色,IS_AUTHENTICATED_ANONYMOUSLY代表匿名登录,ROLE_USER代表普通用户,ROLE_SUPERVISOR代表超级管理员。

程序在启动的时候会遍历解析spring-security配置文件,当命名空间是<http>的时候就使用HttpSecurityBeanDefinitionParser类来解析。

<!-- 静态资源,不用权限 -->  

<httppattern="/resources/**"security="none"/>  

<httppattern="/verify/**"security="none"/>  

<httppattern="/user/login.htm"security="none"/>  

<httppattern="/user/register.*"security="none"/>  

<httppattern="/favicon.ico"security="none"/>

当发现security="none"的时候,则创建一个DefaultFilterChain添加到FilterChainProxy的filterChains属性中。

----------------------------------------------------------------------------------------------------------------------------

最小<http>配置

只需要进行如下配置就可以配置成一个安全配置

<http auto-config='true'>

<intercept-url pattern="/**"  access="ROLE_USER" />

</http>

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

<http auto-config='true'>这一句其实是一些配置的缩写:

<http>

<intercept-url pattern="/**" access="ROLE_USER" />

<form-login  />

<anonymous  />

<http-basic  />

<logout  />

<remember-me  />

</http>

这些元素分别与form-login,匿名认证,注销处理和remember-me对应。

auto-config需要一个UserDetailsService

使用auto-config的时候如果没有配置UserDetailsService就会出现错误。这是因为remember-me服务在auto-config="true"的时候启动了,它的认证机制需要UserDetailsService来实现。

如果碰到报没有定义UserDetailsService造成的问题,试着去掉auto-config配置。






下边这些是标签属性说明: 
配置说明: 
  lowercase-comparisons:表示URL比较前先转为小写。 
  path-type:表示使用Apache Ant的匹配模式。 
  access-denied-page:访问拒绝时转向的页面。 
  access-decision-manager-ref:指定了自定义的访问策略管理器。当系统角色名的前缀不是默认的ROLE_时,需要自定义访问策略管理器。 
  login-page:指定登录页面。 
  login-processing-url:指定了客户在登录页面中按下 Sign In 按钮时要访问的 URL。与登录页面form的action一致。其默认值为:/j_spring_security_check。 
  authentication-failure-url:指定了身份验证失败时跳转到的页面。 
  default-target-url:指定了成功进行身份验证和授权后默认呈现给用户的页面。 
  always-use-default-target:指定了是否在身份验证通过后总是跳转到default-target-url属性指定的URL。 
  logout-url:指定了用于响应退出系统请求的URL。其默认值为:/j_spring_security_logout。 
  logout-success-url:退出系统后转向的URL。 
  invalidate-session:指定在退出系统时是否要销毁Session。 
  max-sessions:允许用户帐号登录的次数。范例限制用户只能登录一次。 
  exception-if-maximum-exceeded: 默认为false,此值表示:用户第二次登录时,前一次的登录信息都被清空。 
  当exception-if-maximum-exceeded="true"时系统会拒绝第二次登录。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值