我正在使用spring boot开发rest api服务,检查我使用令牌的权限 - 在登录请求中将密钥值保存到memcache,键入长度为50的令牌(字符串)并将其值作为您的id。为了能够访问任何休息请求,我的休息控制器将此标记作为get参数(与post,put相同的逻辑)获取,而不是获取用户的id(来自memcache)并检查此用户是否具有特定资源的权限。例如“carwashs / 2 PUT”洗车有FK到公司,用户也有FK到公司,如果这些FK类似你有更新洗车的权利。我正在寻找另一种方法来保护我的休息api使用弹簧安全因为当前方法不安全(我在url中看到令牌并在所有HTTP请求中使用get参数)。但是在官方文档中给出的示例中,Spring安全性似乎只适用于permisions枚举和登录页面。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("anon").password("123456").roles("USER");
auth.inMemoryAuthentication().withUser("admin").password("123456").roles("ADMIN");
auth.inMemoryAuthentication().withUser("userr").password("123456").roles("DBA");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.antMatchers("/dba/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_DBA')")
.and().formLogin();
}
}
如何使用这种方法检查特定洗车的许可?
答案 0 :(得分:1)
您可以使用Spring安全性中的常见内置表达式,如
http.authorizeRequests().hasAuthority("ROLE_ADMIN").antMatchers("/dump/**")
或者您可以使用带有注释的方法安全表达式,如
@PreAuthorize("#id == user.companyId")
你也可以看看那里
https://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html