2 回答
TA贡献1816条经验 获得超6个赞
恐怕这是不可能的:在设置此配置时,它没有关于{authentication.principal.username}将来某个时候将要解决的信息。
但是 Spring 为您提供了一堆内置的方法安全表达式,您可以使用它们来注释您的方法。
从一个简单的表达式开始,比如@PreAuthorize("hasRole('ADMIN')"),你可能会得到一个自定义的表达式:
@XMapping(path = "/users/{username}")
@PreAuthorize("@yourSecurityService.isMyPage(authentication.principal, #username)")
public void yourControllerMethod(@PathVariable String username);
@yourSecurityService.isMyPage(authentication.principal, #username)指的是你的@Service方法public boolean isMyPage(Principal, String)。
TA贡献1794条经验 获得超7个赞
这样的事情怎么样:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/myself").hasAnyRole(ADMIN, MANAGER)
.antMatchers("/users/**").hasRole(ADMIN)
.anyRequest().hasAnyRole(ADMIN, MANAGER)
...
}
@RequestMapping(value = "/myself", method = RequestMethod.GET)
public Profile getMyself() {
// return the profile of the loged in user
}
使用此经理和管理员可以获得他们自己的配置文件,管理员还可以使用 请求其他配置文件/users/{username}。
添加回答
举报