我正在开发Spring Boot和Spring Security Web应用程序,授权和资源服务器启用。我已经定义了一组用户,为他们分配了角色,并试图实现对REST终结点的基于角色的访问。我能够实现对endpoint的基于令牌的访问,但不能限制对最终用户的访问,这将基于他们的角色。
我已经完成了两个endpoint:/rest/products/list
和/rest/products/add
,并试图通过管理员
角色的用户限制对/rest/products/add
endpoint的访问。
我的websecurityConfigureAdapter
如下所示:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private PasswordEncoder passwordEncoder;
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.passwordEncoder(passwordEncoder)
.withUser("user1")
.password(passwordEncoder.encode("user1Pass"))
.roles("USER")
.and()
.withUser("user2")
.password(passwordEncoder.encode("user2Pass"))
.roles("USER")
.and()
.withUser("admin")
.password(passwordEncoder.encode("adminPass"))
.roles("ADMIN");
}
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/rest/products/add").hasAnyRole("ADMIN")
.antMatchers("/rest/products/list").denyAll();
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
因此,资源/rest/products/add
应仅在管理员/adminPass用户具有admin
角色时才可供该用户访问。但是,如果尝试使用user1/user1Pass访问它,它仍然是可访问的:
获取用户1邮递员屏幕的访问令牌
使用user1
Postman屏幕访问ADMIN
仅相关endpoint
此外,我在配置方法中添加了(出于测试目的)以下规则. antMatcher("/Products/list"). denyAll();
这里表示任何用户都不应该访问/Products/list
。但它仍然保持响应(提供正确的访问令牌)。
在这里的类似问题中,如何修复Spring Security中的角色?匹配者的顺序应该从更具体到更少。但在我的例子中,有两个匹配器,没有匹配器可以重叠它们。
我将Spring Boot与Spring Boot starter安全性插件版本2.5.2一起使用。
要使
,还需要进行哪些配置。拥有角色(“管理员”)
和。denyAll()
是否按预期工作?
最终,我们能够通过以下方式找到解决方案:
这里有一个ResourceServerConfigurerAdapter
类的示例。从这一点和您的评论中,dur,我意识到我混淆了ResourceServerConfigurerAdapter
和WebSecurityConfigureAdapter
,试图在WebSecurityConfigureAdapter
中定义访问限制匹配器。我以以下方式更改了资源服务器配置:
方法是在WebSecurityConfigrerAdapter
@Override
public void configure(final HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/rest/products/add").hasAnyRole("ADMIN")
.antMatchers("/rest/products/list").denyAll();
}
被移动到
@Configuration
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(final HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/rest/products/add").hasAnyRole("ADMIN")
.antMatchers("/rest/products/list").denyAll();
}
}
现在,上面匹配器定义的限制正按预期工作。
在我们的体系结构指南中,我们应该只从域模型或存储库实现(在基础结构层)中实例化业务异常 同样,这不会编译,不存在。 有人有主意吗?
我有这个博客资源,它有通常的CRUD方法。(索引,创建,存储,显示,编辑,更新,销毁)。 我的路线中有以下路线。php: 这是很好的索引,但我不知道如何路由显示方法?还是有别的办法?我不应该路由资源,而是应该单独路由每个URI,并将我想要限制的URI放在我的限制访问路由中? 干杯
本文向大家介绍SpringMVC访问静态资源的方法,包括了SpringMVC访问静态资源的方法的使用技巧和注意事项,需要的朋友参考一下 在SpringMVC中常用的就是Controller与View。但是我们常常会需要访问静态资源,如html,js,css,image等。 默认的访问的URL都会被DispatcherServlet所拦截,但是我们希望静态资源可以直接访问。该肿么办呢? 在配置文件:
我们有一个Web应用程序,它使用Azure AD对Office 365进行OAuth。我们正在尝试限制我们有权访问的资源。例如:身份验证用户有权访问Site e1、Site e2和Site e3。我们希望将我们的应用程序访问权限限制为只访问Site e1。有人知道这是否可能吗?我试图查看Office 365、Azure AD甚至Discovery API留档,但找不到任何有用的东西。
问题内容: 我正在尝试设置用于访问智能卡的PKCS11提供程序。我在系统上安装了PKCS11库,并遵循了《Java PKCS#11参考指南》中的说明 。在参考中,他们只是创建一个实例,并将配置文件的名称传递给构造函数。当我尝试编译以下代码时 我收到以下错误。 访问限制:由于必需的库/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/ext/sunpkcs11.jar受
本文向大家介绍PHP实现限制IP访问的方法,包括了PHP实现限制IP访问的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现限制IP访问的方法。分享给大家供大家参考,具体如下: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP网络编程技巧总结》、《php正则表达式用法总结》、《php curl用法总结》、《PHP数组(Array)操作技巧大全》、《php字符串(str