Spring Security 入门(1-9)Spring Security - 拦截 url

intercept-url配置

  • 通过 pattern属性 指定拦截的 url
  • 通过access属性指定url的访问权限

其中,access 的值是一个字符串,其可以直接是一个权限的定义,也可以是一个表达式。

<security:http use-expressions="true">

    <security:form-login />
    <security:logout />
    <security:intercept-url pattern="/secure/**" access="ROLE_USER,ROLE_ADMIN"/>
</security:http>

<security:http use-expressions="true">
    <security:form-login />
    <security:logout />
    <security:intercept-url pattern="/secure/**" access="hasAnyRole(‘ROLE_USER‘,‘ROLE_ADMIN‘)"/>
</security:http>

常用的类型有简单的角色名称定义,多个名称之间用逗号分隔,如:


在上述配置中就表示 secure 路径下的所有 URL 请求都应当具有 ROLE_USER 或 ROLE_ADMIN 权限。当 access 的值是以 “ROLE_” 开头的则将会交由 RoleVoter 进行处理。

此外,其还可以是一个表达式,上述配置如果使用表达式来表示的话则应该是如下这个样子。


或者是使用 hasRole()表达式,然后中间以 or 连接,如:

   <security:intercept-url pattern="/secure/**" access="hasRole(‘ROLE_USER‘) or hasRole(‘ROLE_ADMIN‘)"/>

需要注意的是使用表达式时需要指定 http 元素的 use-expressions=”true”。更多关于使用表达式的内容将在后文介绍。当 intercept-url 的 access 属性使用表达式时默认将使用 WebExpressionVoter 进行处理。

此外,还可以指定三个比较特殊的属性值,默认情况下将使用 AuthenticatedVoter 来处理它们。IS_AUTHENTICATED_ANONYMOUSLY 表示用户不需要登录就可以访问;IS_AUTHENTICATED_REMEMBERED 表示用户需要是通过 Remember-Me 功能进行自动登录的才能访问;IS_AUTHENTICATED_FULLY 表示用户的认证类型应该是除前两者以外的,也就是用户需要是通过登录入口进行登录认证的才能访问。如我们通常会将登录地址设置为 IS_AUTHENTICATED_ANONYMOUSLY。

   <security:http>
      <security:form-login login-page="/login.jsp"/>
      <!-- 登录页面可以匿名访问 -->
      <security:intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
      <security:intercept-url pattern="/**" access="ROLE_USER"/>
   </security:http>

指定访问协议

需求可以通过指定 intercept-url 的 requires-channel 属性来指定。requires-channel 支持三个值:http、https 和 any。any 表示 http 和 https 都可以访问。

   <security:http auto-config="true">
      <security:form-login/>
      <!-- 只能通过 https 访问 -->
      <security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" requires-channel="https"/>
      <!-- 只能通过 http 访问 -->
      <security:intercept-url pattern="/**" access="ROLE_USER" requires-channel="http"/>
   </security:http>

需要注意的是当试图使用 http 请求限制了只能通过 https 访问的资源时会自动跳转到对应的 https 通道重新请求。如果所使用的 http 或者 https 协议不是监听在标准的端口上(http 默认是 80,https 默认是 443),则需要我们通过 port-mapping 元素定义好它们的对应关系。

   <security:http auto-config="true">
      <security:form-login/>
      <!-- 只能通过 https 访问 -->
      <security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" requires-channel="https"/>
      <!-- 只能通过 http 访问 -->
      <security:intercept-url pattern="/**" access="ROLE_USER" requires-channel="http"/>
      <security:port-mappings>
         <security:port-mapping http="8899" https="9988"/>
      </security:port-mappings>
   </security:http>

指定请求方法

通常我们都会要求某些 URL 只能通过 POST 请求,某些 URL 只能通过 GET 请求。这些限制 Spring Security 也已经为我们实现了,通过指定 intercept-url 的 method 属性可以限制当前 intercept-url 适用的请求方式,默认为所有的方式都可以。

 <security:http auto-config="true">
      <security:form-login/>
      <!-- 只能通过 POST 访问 -->
      <security:intercept-url pattern="/post/**" method="POST"/>
      <!-- 只能通过 GET 访问 -->
      <security:intercept-url pattern="/**" access="ROLE_USER" method="GET"/>
   </security:http>

method 的可选值有 GET、POST、DELETE、PUT、HEAD、OPTIONS 和 TRACE。

时间: 2024-10-01 04:02:51

Spring Security 入门(1-9)Spring Security - 拦截 url的相关文章

《深入实践Spring Boot》第1章 Spring Boot入门

目录 第1章 Spring Boot入门 1.1 配置开发环境 1.1.1 安装JDK 1.1.2 安装InterlliJ IDEA 1.1.3 安装Apache Maven 1.1.4 安装Git客户端 1.2 创建项目工程 1.2.1 使用Maven新建项目 1.2.2 使用Spring Initializr新建项目 1.3 使用Spring Boot 1.3.1 Maven依赖管理 1.3.2 一个简单的实例 1.4 运行与发布 1.4.1 在IDEA环境中运行 1.4.2 将应用打包发布

Spring Security 入门(二)

Spring Security 入门(一)中说到,Spring Security执行流程第一步是容器启动时加载系统资源与权限列表,第二步是WEB容器启动时加载拦截器链,并介绍了自定义拦截器的方法.接下来第三步步就是用户登录.介绍下用户登录的流程: 获取用户名和密码,并放入一个 UsernamePasswordAuthenticationToken 实例中(Authentication接口的一个实例); 这个token被传递到一个 AuthenticationManager 实例中进行验证; 若验

Spring Security入门

Spring Security入门: http://www.mossle.com/docs/auth/html/index.html Spring Security 默认的过滤器链 https://blog.csdn.net/u013421749/article/details/78626275 原文地址:https://www.cnblogs.com/aligege/p/9396278.html

Spring Security 入门(三)

在说完了Spring Security框架的功能和执行流程后,就到了写它Spring Boot的集成,先来看最简的配置: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> </parent>

Spring Security 入门(一)

接触Spring Security是因为在面试之前,面试官要我用Spring Boot+Spring Security实现用户登录校验的功能.在此之前接触过一些Spring Boot,对Spring Security则完全没有了解,只知道它是一个权限管理的框架.也好,借此机会写些文章记录下了解和使用Spring Security的过程. Spring Security是一套验证授权框架.Spring Security最重要的两个功能也就是验证(authentication)和授权(authori

Spring Security 入门原理及实战

参考博客: https://www.cnblogs.com/demingblog/p/10874753.html Spring Security 是spring项目之中的一个安全模块,可以非常方便与spring项目无缝集成. 特别是在spring boot项目中加入spring security更是十分简单, 这里就简单介绍一下入门案例和使用原理吧! 写一个简单的springboot测试例子: @Controller public class AppController { @RequestMa

Spring Security 入门(一)

当你看到这篇文章时,我猜你肯定是碰到令人苦恼的问题了,我希望本文能让你有所收获. 本人几个月前还是 Spring 小白,几个月走来,看了 Spring,Spring boot,到这次的 Spring Security. 为了避免大家踩坑,本人将入门的经验传授给那些和我一样正在学习 Spring Security 的小白. 我们从官方例子学习起: 1.我们先来创建一个 Spring Boot 的项目 HelloWorld: 我用的开发工具是 eclipse,如果没装 STS 的话,请点击 Help

Spring Security入门Demo

一.spring Security简介 SpringSecurity,这是一种基于Spring AOP和Servlet过滤器的安全框架.它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权.在Spring Framework基础上,Spring Security充分利用了依赖注入(DI,Dependency Injection)和面向切面技术. 二.建立工程 参考http://blog.csdn.net/haishu_zheng/article/details/51490

Spring Security 入门(1-14)Spring Security 开发指南(转)

开发指南:http://www.cnblogs.com/xingxueliao/p/5911292.html Spring OAuth2.0 提供者实现原理: Spring OAuth2.0提供者实际上分为: 授权服务 Authorization Service. 资源服务 Resource Service. 虽然这两个提供者有时候可能存在同一个应用程序中,但在Spring Security OAuth中你可以把 他它们各自放在不同的应用上,而且你可以有多个资源服务,它们共享同一个中央授权服 务