SpringSecurity学习笔记(一)

一、简介
Spring Security 是 Spring Framework 的一个子项目. 之前也叫做 Acegi Secruty.
Spring Security 能用于保护各种 Java 应用程序(权限管理框架). 但在基于 Web 的应用程序中使用得最为广泛. 
Spring Security 能以声明的方式来保护 Web 应用程序的 URL 访问. 只需简单的配置即可实现.
Spring Security 通过一系列 Servlet 过滤器为 Web 应用程序提供了多种安全服务. 
Spring Security 2.x 显著简化了配置, 使用基于 XML Schema 和基于注解的配置.
----------------------------------------------------------------------------------------------------------------------------
二、配置 web.xml 文件,搭建spring-security环境
  1).搭建spring环境:spring.jar commons-logging.jar
  2).配置spring contextConfigLocation,配置监听器ContextLoaderListener
  3).加入spring-security的jar包spring-security-core-2.0.5.RELEASE.jar
  4).<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>
在 web.xml 文件里配置 DelegatingFilterProxy:
(1).将 HTTP 请求委托给 Spring 应用程序上下文中的一个 Bean。被委托的 Bean 实现了 javax.servlet.Fitler 
     接口, 但它需要受 Spring IOC 容器管理, 而不是直接在 web.xml 中配置。
(2).默认情况下, DelegatingFilterProxy会把 HTTP 请求委托给和它的 <filter-name> 属性相同的 Bean 上(也
     可以在 targetBeanName 初始参数中覆盖该 Bean 的名字)。
(3).SpringSecurity  在 web 服务器加载当前 web 应用时配置一个名称为 springSecurityFilterChain 的过滤
     器链(SpringSecurity 即通过该过滤器链为 web 应用提供安全服务), 所以 <filter-name> 应该使用这个名字.
(4).这个不仅可以配置spring-security还可以配置其他的filter,可以把filter交给spring进行管理。spring-
     security里面的filter需要用到spring中的其他的bean,但是这些bean如何被注进来?如果filter有tomcat或
     servlet等其他容器产生,则IOC中的其他的bean就不会被注进来,就必须springIOC容器去产生filter的bean,
     这样IOC容器中的其他的bean就会被注进来。不用在web.xml文件中配置filter,只要配置DelegatingFilterProxy,
     就可以了。 
----------------------------------------------------------------------------------------------------------------------------
5).添加applicationContext-springsecurity.xml,并且配置DelegatingFilterProxy。
  ①配置spring的HTTP安全,那些页面要被拦截,需要哪些权限。
      <http auto-config="true">
      <intercept-url pattern="/index.jsp" access="ROLE_ADMIN,ROLE_USER"/>
      <intercept-url pattern="/user.jsp" access="ROLE_USER"/>
      </http>
 ② 配置 spring-security 的用户信息
 <authentication-provider>
     <user-service>
  <user password="user" name="user" authorities="ROLE_USER"/>
  <user password="admin" name="admin" authorities="ROLE_ADMIN"/>
      </user-service>
 </authentication-provider>
----------------------------------------------------------------------------------------------------------------------------
6).改变xml默认的命名空间:
原来的配置方式:
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:sec="http://www.springframework.org/schema/security"
修改后的配置方式:
<beans:beans xmlns="http://www.springframework.org/schema/security"
   xmlns:beans="http://www.springframework.org/schema/beans"
步骤:1、互换xmlns属性值和xmlns:sec属性值的位置
         2、把xmlns:sec属性名改为xmlns:bean
         3、把<bean></bean>标签名改为<bean:beans>
 ----------------------------------------------------------------------------------------------------------------------------
7).登出的配置:
 <!-- 配置 spring-security 的 http 安全 -->
 <http auto-config="true">
      <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN,ROLE_USER"/>
      <intercept-url pattern="/user.jsp" access="ROLE_USER"/>
      <!-- 配置登出服务 -->
      <!-- 默认的登出路径,登出去后默认去的页面是/根目录,不销毁session,但是清空session里面的值 -->
      <logout logout-url="j_spring_security_logout" 
                           logout-success-url="logout-success.jsp" 
                           invalidate-session="true"/>
 </http>
---------------------------------------------------------------------------------------------------------------------------
8).登录的配置
<form-login login-page="login.jsp" login-processing-url="login"
              default-target-url="success.jsp" 
              always-use-default-target="true"
              authentication-failure-url="error.jsp"/>
①login-page自定的登录页面,自定义页面上的元素必须和原来的页面的相同
   (例如:action路径,name='j_username'等) 
②login-processing-url定义登录的请求路径,对应login.jsp页面中action的值
③default-target-url该属性配置登录成功后的相应的页面 ,默认是根目录。
④always-use-default-target若请求的目标页面受保护,则security则会响应login-page属性对应的页面
   (如果配置了登录页面,就显示登录页面),默认情况下,若登录成功将相应刚才请求的目标页面,
   若配置了该属性,将以default-target-url属性指定的页面作为相应。
   例如:直接请求admin.jsp
   ◆没有配置该属性:
   若admin.jsp受保护,跳转到login-page属性对应的页面,验证通过后响应admin.jsp
   ◆配置该属性:
   若admin.jsp受保护,跳转到login-page属性对应的页面,验证通过后响应default-target-url属性对应的页面
⑤authentication-failure-url配置认证失败后跳转的页面
---------------------------------------------------------------------------------------------------------------------------
9).使用spring-security的自定义标签 
①加入标签的jar包:spring-security-taglibs-2.0.5.RELEASE.jar
②<security:authorize ifAllGranted="ROLE_ADMIN" 
            ifAnyGranted="" ifNotGranted="">
   </security:authorize>
   ifAllGranted具有属性值的所有的属性才有访问权限
   ifAnyGranted具有属性值的任何一个权限就可以访问
   ifNotGranted不具有属性值的权限才可以访问
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值