gpt4 book ai didi

java - 如何使用 Spring security 保护 URL?

转载 作者:行者123 更新时间:2023-11-29 05:23:28 25 4
gpt4 key购买 nike

我正在使用 Spring MVC + Spring Security 开发 Web 应用程序,我有以下 URL:

/*this URL should be accessible by any User, i.e. users should be able to see other users' profiles*/
/users/someUserId/profile

/* all the following URLs should be accessed only by the current authenticated user */
/users/someUserId/profile/edit
/users/someUserId/picture/edit
/users/someUserId/notifications
/users/someUserId/friends

并且我需要按照之前的描述保护它们。

我的配置方法如下:

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.regexMatchers("/users/[\\w]+/profile").authenticated()
.antMatchers("/users/[\\w]/**").access("principal.name == regexGroupMatch")
.anyRequest().authenticated()
.and()
.jee().mappableRoles("Admin", "User");
}

我想知道是否有可能实现这样的目标:

.antMatchers("/heroes/[\\w]/**").access("principal.name == regexGroupMatch")

通过这样做,我只希望用户 user1 能够访问这些 URL:

/users/user1/profile/edit
/users/user1/picture/edit
/users/user1/notifications

因此,user2 一定不能访问前面提到的 URL,但必须能够访问: /用户/用户1/个人资料/编辑 /用户/用户1/图片/编辑 /用户/用户1/通知

还有:

/users/user1/profile
/users/user2/profile
/users/user3/profile
etc...

是否可以使用 Spring Security 来实现?

最佳答案

不,没有在正则表达式中提取匹配组并将它们与用户名进行比较的功能。另请注意, Ant 模式根本不支持正则表达式。

在任何情况下,依赖复杂的 URL 模式都不是一个好主意。对于这样的事情,您最好在 Controller 级别或某些服务接口(interface)上使用方法安全性,您可以在其中按名称引用方法参数。例如,启用方法安全表达式后,您可以编写

@PreAuthorize("#user.name == authentication.name")
public void editUser(User user) {
....
}

或者,如 Misha 所说,您可以直接编写规则代码,如果事情变得比简单表达式更复杂,这种方法更可取。

关于java - 如何使用 Spring security 保护 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23700951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com