客户遗留系统的权限部分使用了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”即可。
分享到:
相关推荐
例如,你可以使用 `<http>` 元素来配置URL过滤, `<intercept-url>` 用于指定URL模式的访问权限, `<form-login>` 和 `<logout>` 分别用于处理表单登录和登出。 在"springsecurity.rar"文件中,可能包含了Spring...
<security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" /> <security:intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" /> <security:form-login login-page="/login" ...
使用`@Secured`或`@PreAuthorize`注解来限制控制器方法的访问,或者在`<http>`元素内定义访问规则,例如`<intercept-url>`。 5. **登录失败和成功处理器**: 可以自定义`AuthenticationFailureHandler`和`...
在"SpringSecurity笔记2-SpringSecurity命名空间"这个主题中,我们将深入探讨SpringSecurity配置的核心——命名空间。 SpringSecurity通过XML配置文件中的命名空间来简化设置过程,这些命名空间提供了丰富的元素和...
Spring Security允许我们定义哪些URL路径需要用户进行身份验证才能访问。这通常通过在`web.xml`中配置`<http>`元素来实现。例如: ```xml <intercept-url pattern="/admin/**" access="ROLE_ADMIN" /> ...
<intercept-url pattern="/admin/**" access="ROLE_ADMIN" /> <!-- 更多拦截URL和权限规则 --> ``` 这里的`access="ROLE_ADMIN"`表示只有具有“ADMIN”角色的用户才能访问以`/admin/`开头的URL。`...
### Spring Security 多登录页面配置详解 在许多大型企业级应用中,为了更好地实现权限管理和用户体验,往往会采用多个登录页面的方式来进行用户身份验证。这种方式能够有效地将不同类型的用户(如前台用户、后台...
启动应用,尝试访问不同的URL,查看Spring Security如何根据你的配置进行权限控制。比如,尝试以非管理员用户身份访问`/admin`路径,你应该会被重定向到登录页面,因为非管理员用户没有权限访问这个路径。 5. **...
在压缩包文件"SpringSecurity3"中,可能包含了以下内容: - `spring-security.xml`:这是主要的配置文件,包含了上述提到的所有配置。 - `web.xml`:可能包含了Spring Security过滤器链的配置,以便在Web应用启动时...
- **配置**:这是Spring Security配置中最核心的部分,通过`<http>`元素可以定义哪些URL需要进行身份验证和授权。`auto-config='true'`属性表示自动配置,简化了配置过程。`<intercept-url>`元素用于指定特定URL的...
你可以使用`<intercept-url>`元素定义URL模式及其对应的访问权限。 5. **SQL脚本** 提到的SQL脚本可能用于创建用户表和角色表,以及相关的权限关系。这可能包括用户表(如`users`),角色表(如`authorities`),...
Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个"spring security2 例子"中,我们可能会探索如何利用Spring Security 2版本来保护我们的应用程序。Spring Security 2虽然已经...
我们可以通过使用`<intercept-url>`标签在Web安全配置中定义URL级别的访问控制。 3. **角色与权限**:Spring Security 支持角色和权限的概念。角色通常代表用户的职责,权限则是对特定操作的允许或禁止。在这个实例...
Spring Security的`<access-denied-handler>`和`<intercept-url>`元素可以用来定义这些规则。例如,我们可以指定只有管理员角色的用户才能访问特定的URL。 5. **Struts2集成**:Spring Security与Struts2的集成主要...
### MyEclipse 8.5 中 Spring Security 2.0.5 的简易实践 #### 一、背景介绍 本篇文章将详细介绍如何在 MyEclipse 8.5 中使用 Spring Security 2.0.5 来实现一个简单的权限管理示例。Spring Security 是一个功能...
"springsecurity-namespace"可能指的是Spring Security的XML命名空间配置。在Spring Security的早期版本中,使用XML配置是最常见的实践。例如,你可能会看到以下片段: ```xml <intercept-url pattern="/admin/**...
SpringSecurity是Java开发中用于处理安全问题的一个强大框架,它为Web应用提供了全面的安全服务,包括用户认证、访问控制、CSRF防护、XSS防护等。这个资源包包含了一个中文文档和简单的视频教程,帮助开发者深入理解...
教程文档`教你使用_SpringSecurity_3.0_52页.pdf`会详细指导你如何一步步配置和使用Spring Security。它应该包含了配置文件的示例、如何集成到Spring应用中、如何创建自定义认证逻辑以及如何进行授权设置等内容。...