我正在尝试将不同的对象用于不同的用户角色。
@Component
public class TestObject {
private String name;
private String secret;
@PreAuthorize("hasRole('ADMIN')")
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
有没有办法像这样使用@PreAuthorize?
答案 0 :(得分:0)
您只能在Spring Managed Bean中使用const body = new FormData();
Object.entries(request.fields).forEach(([k, v]) => {
body.append(k, v);
});
body.append('file', file);
await fetch(request.url, {
method: 'post',
body: body
});
。
如果必须创建一个对象的多个实例,则这些实例不受应用程序上下文的管理。
如果您用@PreAuthorize
标记一个类,它将成为一个Spring bean,可以由应用程序上下文注入和管理。现在,如果您(不是Spring)创建此类的实例,则此特定实例将不受Spring的管理。
这意味着@Component
在这种情况下将不起作用。
一种解决方法是使用@PreAuthorize
。
类似这样的东西:
Utils.java
SecurityContextHolder
TestObject.java
public class Utils {
public static boolean isAdmin() {
Collection<?extends GrantedAuthority> authorities = SecurityContextHolder.getContext()
.getAuthentication().getAuthorities();
for (GrantedAuthority authority: authorities) {
if (authority.getAuthority().equalsIgnoreCase("ADMIN")) {
return true;
}
}
return false;
}
}