SpringSecurity框架的使用和配置文件的书写

定义:
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
功能:
Spring Security对Web安全性的支持大量地依赖于Servlet过滤器。这些过滤器拦截进入请求,并且在应用程序处理该请求之前进行某些安全处理。 Spring Security提供有若干个过滤器,它们能够拦截Servlet请求,并将这些请求转给认证和访问决策管理器处理,从而增强安全性。根据自己的需要,可以使用适当的过滤器来保护自己的应用程序。
如果使用过Servlet过滤器且令其正常工作,就必须在Web应用程序的web.xml文件中使用 和元素配置它们。虽然这样做能起作用,但是它并不适用于使用依赖注入进行的配置。
FilterToBeanProxy是一个特殊的Servlet过滤器,它本身做的工作并不多,而是将自己的工作委托给Spring应用程序上下文 中的一个Bean来完成。被委托的Bean几乎和其他的Servlet过滤器一样,实现javax.servlet.Filter接 口,但它是在Spring配置文件而不是web.xml文件中配置的。
实际上,FilterToBeanProxy代理给的那个Bean可以是javax.servlet.Filter的任意实现。这可以是 Spring Security的任何一个过滤器,或者它可以是自己创建的一个过滤器。但是正如本书已经提到的那样,Spring Security要求至少配置四个而且可能一打或者更多的过滤器。

使用案例

在进行后台管理时,我们希望通过springsecurity框架帮助我们对非法访问进行拦截,必须通过账户和密码的登录才可以访问到其他页面。

  • 第一步:引入依赖:
<!--SpringSecurity框架-->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>4.1.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>4.1.0.RELEASE</version>
</dependency>
  • 第二步:配置web.xml文件,设置springsecurity过滤器,让其帮助我们拦截请求:
<!--springSecurity框架的过滤器-->
<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>
  • 第三步,在资源文件中具体配置其参数,创建文件applicationContext-security.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd
                  http://www.springframework.org/schema/security
                  http://www.springframework.org/schema/security/spring-security.xsd">

    <!--可以匿名访问的资源,也就是未登录就可以访问-->
    <!--设置登录页面和其他css,js静态资源可以直接访问-->
    <http pattern="/login.html" security="none"></http><!--security属性为none代表该资源可以直接访问-->
    <http pattern="/css/**" security="none"  />
    <http pattern="/img/**" security="none"  />
    <http pattern="/js/**" security="none"  />
    <http pattern="/plugins/**" security="none"  />
    <http pattern="/fail.html" security="none"  />

    <!--2、具体拦截校验的配置-->
    <http use-expressions="false">

        <intercept-url pattern="/**" access="ROLE_ADMIN"></intercept-url> <!--除了第一步资源可以匿名访问,其他资源都需要进行拦截校验(认证和授权)-->
        <form-login
                login-page="/login.html"
                default-target-url="/admin/index.html"
                always-use-default-target="true"
                authentication-failure-url="/fail.html"
        ></form-login><!--1、登录页面  2、登录成功跳转到的页面  3、无论何时只要登录成功都跳转到2的页面  4、认证失败(登录失败)跳转到的页面-->

        <csrf disabled="true"></csrf> <!--禁止跨站请求伪造(默认不允许跨域访问),也是一种安全机制-->

        <headers>
            <!--index.html主页是一个框架页,有frame标签的-->
            <frame-options policy="SAMEORIGIN"></frame-options><!--同源,当index完成授权,它所嵌套的页面自动完成授权-->
        </headers>

        <logout /><!--负责注销退出-->
    </http>


    <!--3、配置用户信息(xml  db)-->
    <authentication-manager>
        <authentication-provider>
            <user-service>
                <!--配置了两个用户信息,都具有ROLE_ADMIN的权限-->
                <user name="csdn" password="123" authorities="ROLE_ADMIN"></user>
                <user name="yi" password="456" authorities="ROLE_ADMIN"></user>
            </user-service>
        </authentication-provider>
    </authentication-manager>

</beans:beans>

总结:

  • 使用< http pattern="/login.html" security=“none”>< /http>标签并且设置security属性为none来让框架对这些请求不拦截
  • < intercept-url pattern="/**" access=“ROLE_ADMIN”>< /intercept-url>通过该标签设置剩余的请求都需要拦截认证,这里认证的方式是ROLE_ADMIN类型我们自己设置的账户密码
  • < form-login> 标签的四个属性
属性作用
login-page登录页面
default-target-url通过认证校验后跳转的页面
always-use-default-target当设置true时,代表无论何时,只要登录成功都跳转到default-target-url设置的页面
authentication-failure-url设置验证失败后跳转的页面
  • 设置禁止跨域请求:< csrf disabled=“true”>< /csrf>
  • < logout />标签负责注销退出,这代表需要退回登录页面重新登录验证
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值