`
aqingsao
  • 浏览: 174685 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Security intercept url

    博客分类:
  • Java
阅读更多

客户遗留系统的权限部分使用了Spring security中的FilterSecurityInterceptor,可以通过设置intercept-url及对应的权限进行验证。

其典型用法是在配置文件的Bean中定义:

    <bean id="filterSecurityInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
        <property name="objectDefinitionSource">
            <security:filter-invocation-definition-source path-type="ant">
                <security:intercept-url pattern="/books/*" access="PRIVILEGE_BOOKS"/>

            </security:filter-invocation-definition-source>

        </property>

    </bean>

但由于我们新使用了RESTful的url,所以上面的配置无法验证“/books”这样的url。

 

[尝试一]

把pattern修改成了"/books*”,希望它可以拦截所有以“books”开头的url。

但结果发现它只拦截“/books”或者“/booksa”,而不会拦截“/books/1”。

 

究其原因,是path-type采用Ant方式。所以“*”只能匹配任意多个字符,但是对分隔符“/”无效。

 

[尝试二]

既然采用了Ant匹配方式,写就比较容易了。但是犹豫程序部署及测试时间较长,于是写了一个快速的单元测试:

import org.springframework.util.AntPathMatcher;
import java.util.Arrays;

public class QuickTest {
    public static void main(String[] args) {
        AntPathMatcher matcher = new AntPathMatcher();
        String[] pattern = {"/em*", "/em**", "/em/*", "/em/**", "/em/**/*"};
        String[] str = {"/em", "/ems", "/em/a", "/em/a/b", "/em/a/b/c/"};
        for (String s : str) {
            for (String p : pattern) {
                System.out.println("result:" + matcher.match(p, s));
            }
        }
    }
}
 

经过测试,结果如下:

/book
/books /books/a /books/a/b /books/a/b/c
EXPECTED false true true true true
/books* false true false false false
/books** false
true false false false
/books/* false false true false false
/books/** false true true true true
/books/**/* false false true true true

 

根据与期望的结果比较,知道正确的模式是“/books/**”


当然,如果你不想使用ant格式,也可以采用正则表达式,将bean定义中的path-type改成“regex”即可。

分享到:
评论

相关推荐

    SpringSecurity学习总结源代码

    例如,你可以使用 `&lt;http&gt;` 元素来配置URL过滤, `&lt;intercept-url&gt;` 用于指定URL模式的访问权限, `&lt;form-login&gt;` 和 `&lt;logout&gt;` 分别用于处理表单登录和登出。 在"springsecurity.rar"文件中,可能包含了Spring...

    初识 Spring Security - v1.1.pdf

    &lt;security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" /&gt; &lt;security:intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" /&gt; &lt;security:form-login login-page="/login" ...

    Spring Security 3多用户登录实现一

    使用`@Secured`或`@PreAuthorize`注解来限制控制器方法的访问,或者在`&lt;http&gt;`元素内定义访问规则,例如`&lt;intercept-url&gt;`。 5. **登录失败和成功处理器**: 可以自定义`AuthenticationFailureHandler`和`...

    SpringSecurity笔记2-SpringSecurity命名空间

    在"SpringSecurity笔记2-SpringSecurity命名空间"这个主题中,我们将深入探讨SpringSecurity配置的核心——命名空间。 SpringSecurity通过XML配置文件中的命名空间来简化设置过程,这些命名空间提供了丰富的元素和...

    Spring Security 3.1 配置实例,有URL 方法拦截,都存数据库 maven

    Spring Security允许我们定义哪些URL路径需要用户进行身份验证才能访问。这通常通过在`web.xml`中配置`&lt;http&gt;`元素来实现。例如: ```xml &lt;intercept-url pattern="/admin/**" access="ROLE_ADMIN" /&gt; ...

    Spring Security 把授权信息写入数据库

    &lt;intercept-url pattern="/admin/**" access="ROLE_ADMIN" /&gt; &lt;!-- 更多拦截URL和权限规则 --&gt; ``` 这里的`access="ROLE_ADMIN"`表示只有具有“ADMIN”角色的用户才能访问以`/admin/`开头的URL。`...

    spring-security多登录页面配置

    ### Spring Security 多登录页面配置详解 在许多大型企业级应用中,为了更好地实现权限管理和用户体验,往往会采用多个登录页面的方式来进行用户身份验证。这种方式能够有效地将不同类型的用户(如前台用户、后台...

    Spring Security 新手入门级maven实例

    启动应用,尝试访问不同的URL,查看Spring Security如何根据你的配置进行权限控制。比如,尝试以非管理员用户身份访问`/admin`路径,你应该会被重定向到登录页面,因为非管理员用户没有权限访问这个路径。 5. **...

    Spring Security3 简单demo

    在压缩包文件"SpringSecurity3"中,可能包含了以下内容: - `spring-security.xml`:这是主要的配置文件,包含了上述提到的所有配置。 - `web.xml`:可能包含了Spring Security过滤器链的配置,以便在Web应用启动时...

    spring security 2 配置说明

    - **配置**:这是Spring Security配置中最核心的部分,通过`&lt;http&gt;`元素可以定义哪些URL需要进行身份验证和授权。`auto-config='true'`属性表示自动配置,简化了配置过程。`&lt;intercept-url&gt;`元素用于指定特定URL的...

    spring security3.1的demo

    你可以使用`&lt;intercept-url&gt;`元素定义URL模式及其对应的访问权限。 5. **SQL脚本** 提到的SQL脚本可能用于创建用户表和角色表,以及相关的权限关系。这可能包括用户表(如`users`),角色表(如`authorities`),...

    spring security2 例子

    Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个"spring security2 例子"中,我们可能会探索如何利用Spring Security 2版本来保护我们的应用程序。Spring Security 2虽然已经...

    Spring Security3.1实例

    我们可以通过使用`&lt;intercept-url&gt;`标签在Web安全配置中定义URL级别的访问控制。 3. **角色与权限**:Spring Security 支持角色和权限的概念。角色通常代表用户的职责,权限则是对特定操作的允许或禁止。在这个实例...

    spring Security整合SSH

    Spring Security的`&lt;access-denied-handler&gt;`和`&lt;intercept-url&gt;`元素可以用来定义这些规则。例如,我们可以指定只有管理员角色的用户才能访问特定的URL。 5. **Struts2集成**:Spring Security与Struts2的集成主要...

    myeclipse 8.5的spring security 2.0.5的简单练习(图解)

    ### MyEclipse 8.5 中 Spring Security 2.0.5 的简易实践 #### 一、背景介绍 本篇文章将详细介绍如何在 MyEclipse 8.5 中使用 Spring Security 2.0.5 来实现一个简单的权限管理示例。Spring Security 是一个功能...

    Spring Security 学习总结1_3

    "springsecurity-namespace"可能指的是Spring Security的XML命名空间配置。在Spring Security的早期版本中,使用XML配置是最常见的实践。例如,你可能会看到以下片段: ```xml &lt;intercept-url pattern="/admin/**...

    SpringSecurity 中文文档+简单视频教程

    SpringSecurity是Java开发中用于处理安全问题的一个强大框架,它为Web应用提供了全面的安全服务,包括用户认证、访问控制、CSRF防护、XSS防护等。这个资源包包含了一个中文文档和简单的视频教程,帮助开发者深入理解...

    spring security3配置和使用实例+教程

    教程文档`教你使用_SpringSecurity_3.0_52页.pdf`会详细指导你如何一步步配置和使用Spring Security。它应该包含了配置文件的示例、如何集成到Spring应用中、如何创建自定义认证逻辑以及如何进行授权设置等内容。...

Global site tag (gtag.js) - Google Analytics