我添加了基于方法的安全性和角色层次结构。我在构建过程中不断遇到以下异常:
组织。springframework。豆。BeanInstationException:未能实例化[org.springframework.web.servlet.HandlerMapping]:工厂方法“defaultServletHandlerMapping”引发异常;嵌套的例外是java。lang.IllegalArgumentException:配置默认servlet处理需要ServletContext
我尝试了很多不同的配置选择,但都不起作用...这是我的基本Web安全配置类(如您所见,我添加了与角色层次结构相关的bean):
@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
(...)
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.csrf()
.disable()
(...)
.expressionHandler(webExpressionHandler())
(...)
.anyRequest().authenticated();
httpSecurity
.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
}
@Bean
public SecurityExpressionHandler<FilterInvocation> webExpressionHandler() {
DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
defaultWebSecurityExpressionHandler.setRoleHierarchy(roleHierarchy());
return defaultWebSecurityExpressionHandler;
}
@Bean
public RoleHierarchy roleHierarchy() {
RoleHierarchyImpl r = new RoleHierarchyImpl();
r.setHierarchy(Role.getHierarchy());
return r;
}
(...)
}
下面是我根据这个线程创建的单独配置文件:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class GlobalMethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Autowired
private RoleHierarchy roleHierarchy;
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = (DefaultMethodSecurityExpressionHandler) super.createExpressionHandler();
expressionHandler.setRoleHierarchy(roleHierarchy);
return expressionHandler;
}
}
我为此挣扎了好几个小时。我尝试过的相关话题如下:
感谢您的帮助!
好的,找到了。
我仔细研究了这些类注释,找到了一个简单的解决方案:我从GlobalMethodSecurityConfig中删除了@EnableGlobalMethodSecurity
,并将其移动到了WebSecurityConfiguration,它以前就是这样。看起来是这样的:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { (...) }
这是:
@Configuration
public class GlobalMethodSecurityConfig extends GlobalMethodSecurityConfiguration { (...) }
最有趣的是,这里被接受的答案告诉我什么不适合我。
我无法在注释中使用方法。还有给出。我错过了什么?尽管工作正常。 我正在从数据库中为用户分配权限。
我需要使用登录的员工的角色在jsp页面中隐藏导航。应用程序使用单点登录登录。我将只从另一个应用程序获得用户的用户名,我将使用该应用程序在数据库中搜索以获得员工的详细信息。我在employee表中有一个role列,我目前正在javascript中使用它来显示和隐藏导航。如何设置spring security role并在jsp标记中使用“hasRole('any role')”,以显示或隐藏导航。我
我试图保护我的Spring启动应用程序(1.21)看起来像我的antMatcher("/报告**"). hasRole("报告")的一些URL模式被忽略。 e、 g.如果我浏览到localhost:9000/report/books之类的内容,我需要登录,它只适用于我的用户名密码组合,但我没有将角色报告设置为我的用户“user”。所以我希望我不被允许访问报告网站,但页面会显示出来。 我必须如何更改
在 JAX-RS 应用程序中,必须根据已登录用户分配到的角色来筛选我的某些资源。我正在尝试使用安全注释(和)来实现此目的。 现在,每个人(匿名和登录用户)都可以并检索(每个id),但对于角色中的用户,我希望看到输出(此处序列化为JSON): 其他用户(无论是匿名用户还是非角色的其他用户)应该只看到: 我知道Jersey有实体过滤(以及基于安全角色进行过滤的实现)。 不幸的是,Liberty(基于A
看起来它工作得很好,但我想知道我是否必须确保新代码需要线程安全?这里有什么意见吗?抱歉用了假名字,提前致谢。
到目前为止还好。我使用swagger-codegen构建了相应的服务器存根,它遵循connexion安全模型,并提供了两个字段,即承载令牌和“required_scopes”,即应该包含“labuser”。访问endpoint时,调用控制器函数: 当承载令牌正确传递时,是。因此,无法实际验证提供的令牌中显示的凭据和权限是否与授权控制器中endpoint所需的范围相匹配。我考虑在调用的endpoin