`

SpringSecurity笔记2-SpringSecurity命名空间

 
阅读更多

  <beans:beans xmlns="http://www.springframework.org/schema/security"
         xmlns:beans="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/security
         http://www.springframework.org/schema/security/spring-security-3.0.3.xsd">
         ...
    </beans:beans>
    采用该命名空间:http://www.springframework.org/schema/security,系统类路径中需引入以下依赖:
    <dependency>
           <groupId>org.springframework.security</groupId>
           <artifactId>spring-security-core</artifactId>
           <version>${spring.security.version}</version>
    </dependency>
    <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${spring.security.version}</version>
    </dependency>

    <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${spring.security.version}</version>
    </dependency>

    <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>${spring.security.version}</version>
    </dependency>

1. 命名空间的配置
    (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>
    </filter>
    通过这种方式提供了一个访问SpringSexurity底层的“钩子”。DelegatingFilterProxy是Spring框架的类,是

    javax.servlet.Filter的一个实现,将安全处理的流程代理给了一个过滤器,该过滤器是Springs应用上下文中定义

    的一个SpringBean: springSecurityFilterChain,该Bean用于处理Web安全。

    FilterChainProxy , 一个专一的过滤器,用于将多个过滤器组成一个连执行过滤功能;SpringSecurity中需要通过

    多个Filter来提供不同的功能,这些多个Filer就是用FilterChainProxy来组装的,只是具体的细节我们不需关注,

    只需要通过生命配置:<http>元素。
    (2) http元素配置
    <http auto-config='true'>
            <intercept-url pattern="/**" access="ROLE_USER" />
    </http>

    该配置等价与:

    <http>
            <form-login />
            <http-basic />
            <logout />
            <intercept-url pattern="/**" access="ROLE_USER" />
     </http>

     默认auto-config属性包括:
    <http>
            <form-login />
            <http-basic />
            <logout />
    </http>
    该配置用于启用Web安全。Http元素将自动装配一个FilterChainProxy,所有的Fileter都在该FilterChainProxy

    中;根据该配置,应用程序中的所有URL被保护,需要角色:ROLE_USER去访问。此处可以配置多个intercept

    -url元素,默认将根据配置的顺序启用过滤策略;同时可添加可给该元素添加method属性以限制特定的HTTP

    Method(GET,POST,PUT)可以访问。

   
    <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>
    可以在authentication-manager元素下配置其他的authentication-provider,这些authentication-provider

    将会被轮流的处理或参考。
    (3) 登录表单选项
    默认情况下,设置了auto-config='true'后,SpringSecurity将根据系统的配置自动生成一个LoginForm页面 ,同

    时命 名空间也提供了支持用户客制化定义登录页面的属性:
    <http auto-config='true'>
              <intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
              <intercept-url pattern="/**" access="ROLE_USER" />
              <form-login login-page='/login.jsp'/>
    </http>

    或配置成:

    <http auto-config="true" use-expressions="false">
           <form-login login-processing-url ="/static/j_spring_security_check" login-page ="/login"
                  authentication-failure-url ="/login?login_error=t"/>
    </http>
    该配置中form-login覆盖了默认的配置,其中access="IS_AUTHENTICATED_ANONYMOUSLY"可被匿名用户
    访问; 根据当前的配置"pattern="/login.jsp*"与pattern="/**",这两个匹配模式拦截登录请求,将 在应用程

    序中引起一个无限的过滤循环,这是错误的配置。
    <http auto-config='true'>
              <intercept-url pattern="/css/**"  filters="none" />
              <intercept-url pattern="/login.jsp*"  filters="none" />
              <intercept-url pattern="/**" access="ROLE_USER" />
              <form-login login-page='/login.jsp'/>
     </http>
     通过制定filter="none"可避免这种现象,指定该属性后,访问的限制将被忽略。

     附件中包括SpringSecurity自动生成的Form Login和一个自定义的FormLogin: LoginForm.rar.
     (4) 使用基本认证代替Form Login
     <http auto-config='true'>
               <intercept-url pattern="/**" access="ROLE_USER" />
               <http-basic />
      </http>
     这种情况下,当用户访问一个收保护的资源时,基本认证将优先启用,基于Form Login也将同时可用。

     (5) 设置登出选项

     <logout logout-url ="/static/j_spring_security_logout"/>
     (6) 设置登录后系统的主页
     默认值为:"/"
     <http>
             <intercept-url pattern='/login.htm*' filters='none'/>
             <intercept-url pattern='/**' access='ROLE_USER' />
             <form-login login-page='/login.htm' default-target-url ='/home.htm'
                       always-use-default-target='true' />
     </http>

2. 拦截请求

    (1) 默认实现

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

    属性pattern默认采用Ant 模式匹配URL地址路径,若改变http元素的属性path-type=regex则将采用regular表

    达式;access属性指定访问该URL需要的角色。如:

    <intercept-url pattern="/admin/**" access="ROLE_ADMIN" />

    (2) Spring表达式实现

    需要首先在http元素中指定:use-expressions="true":

    <http auto-config="true" use-expressions="true">
       ...
    </http>

    与默认实现中等价配置:

    <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />

    如果当前用户被赋予了相应的角色,则hasRole()表达式将返回True, 认证通过。从SpringSecurity开始,已经提供

    了许多表达式,见附件:Spring Security extends the Spring Expression Language.zip

    例如,如果想指定一个URL地址只能被指定的角色和指定的IP地址访问,可以配置成这样:

    <intercept-url pattern="/admin/**"

          access="hasRole('ROLE_ADMIN') and hasIpAddress('192.168.1.2')" />

    (3) 使用https

    <intercept-url pattern="/spitter/form" requires-channel="https" />

    需要指定属性:requires-channel="https", 如果不需要https支持,则: requires-channel="http" .

分享到:
评论

相关推荐

    springsecurity3 学习笔记源码分析所得

    8. **Namespace Configuration**: Spring Security 3提供了一个XML命名空间,简化了配置过程。通过 `&lt;http&gt;`, `&lt;authentication&gt;`, 和 `&lt;access-control&gt;` 元素,我们可以轻松地配置安全设置。 9. **Customization*...

    Spring_Security权限管理_学习笔记

    接下来,我们使用Spring Security的命名空间来简化配置。在`applicationContext.xml`中,引入Spring Security的XML命名空间,并定义`http`和`authentication-provider`元素。`http`元素用于配置访问控制,如`...

    spring框架学习笔记

    在Spring中,为XML配置文件添加相应的命名空间和XSD引用,可以提供代码提示和验证。 - **注入类型**:Spring支持多种注入方式,如构造器注入、setter注入、接口注入等。通过`@Autowired`注解可以实现自动装配,结合...

    Spring笔记(狂神说java)

    Spring Data还提供了强大的查询支持,可以通过方法命名自动创建查询。 以上是对Spring框架的一些基础知识介绍,Spring以其强大的功能和灵活性,已经成为Java开发领域不可或缺的一部分。通过深入学习和实践,开发者...

    spring笔记

    1. **在`applicationContext.xml`文件中添加命名空间和Schema**: ```xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    xichuan的学习总结笔记,覆盖了java、spring、java其他常用框架,以及大数据相关组件等.zip

    2. **Spring框架**:IoC(控制反转)和AOP(面向切面编程)概念,Spring Boot快速开发,Spring MVC设计模式,数据访问(如JDBC、MyBatis),Spring Security和Spring Cloud等相关服务。 3. **Java其他常用框架**:...

    springSide3框架的笔记参照.pdf

    在配置文件中,如applicationContext.xml,定义了Spring应用上下文的配置,包括bean、jee、tx和context命名空间的引用,遵循Spring的XML配置标准。这个配置文件是Spring应用程序的核心,用于定义组件的依赖关系和...

    基于JSP开发的云笔记系统源代码+数据库

    5. **用户认证与授权**:为了保护用户数据,系统需要有用户登录和权限管理功能,可能使用了如Spring Security或Apache Shiro等安全框架。 6. **前端技术**:除了JSP,前端可能还使用了HTML、CSS和JavaScript,可能...

    全套达内学习笔记(java)

    【Spring++.zip】:Spring是一个流行的Java企业级应用框架,涵盖依赖注入、AOP(面向切面编程)、MVC、Spring Boot、Spring Data、Spring Security等多个方面。这部分学习可能涉及如何使用Spring框架简化开发和提高...

    否则throw new Ac

    默认情况下,许多Web应用框架(如Spring Security)会提供一个预定义的403错误页面来显示给用户,告诉他们为什么无法访问所请求的资源。例如,在Spring Security中,可以通过配置来指定自定义的403页面路径,从而...

    springboot267大学生科创项目在线管理系统的设计与实现.zip

    5. **权限控制**:可能采用了Spring Security或Apache Shiro进行用户认证和授权。 6. **文件管理**:可能有上传和下载功能,涉及到文件存储,如本地存储或云存储服务。 压缩包中的文件名称列表揭示了项目的一些组成...

    4IV8-PSW-Martinez-Bravo-Eduardo

    【标题】"4IV8-PSW-Martinez-Bravo-Eduardo" 指的可能是一个特定的项目、课程或者研究,由Eduardo Martinez Bravo创建或参与,以4IV8作为标识,并且与密码学(PSW,可能是Password Security or Web)相关。...

Global site tag (gtag.js) - Google Analytics