- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 Spring Web 应用程序实现基于 ACL 的授权。一旦我将 @EnableGlobalMethodSecurity(prePostEnabled = true)
注释添加到我的安全配置类中,Hibernate 事务 session 处理就会中断,每当我尝试保存一个对象时,我都会得到:Could not obtain当前线程的事务同步 session
。我怀疑我错误地配置了一些与我的 ACL 缓存相关的东西,因为当我从我的配置中删除相关方法时问题也会消失(同时我的类仍然用 @EnableGlobalMethodSecurity(prePostEnabled = true)
注释)。这些是我的配置中的相关方法:
@Bean
public RoleHierarchyImpl roleHierarchy() {
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
roleHierarchy.setHierarchy("ROLE_ADMINISTRATOR > ROLE_MONITOR > ROLE_USER");
return roleHierarchy;
}
/**
* ACL audit logger (print ACL audits to console)
* @return
*/
@Bean
ConsoleAuditLogger auditLogger(){
return new ConsoleAuditLogger();
}
/**
* Caches ACL permissions to reduce database load
* @return AclCache
*/
@Bean
SpringCacheBasedAclCache aclCache(){
PermissionGrantingStrategy permissionGrantingStrategy =
new DefaultPermissionGrantingStrategy(auditLogger());
return new SpringCacheBasedAclCache(cacheManager().getCache("aclCache"), permissionGrantingStrategy, aclAuthorizationStrategy());
}
@Bean
public CacheManager cacheManager() {
return new EhCacheCacheManager(ehCacheCacheManager().getObject());
}
/**
* Cache manager factory to create the cached based on the settings in "/WEB-INF/ehcache.xml"
* @return EhCacheManagerFactoryBean
*/
@Bean
public EhCacheManagerFactoryBean ehCacheCacheManager() {
EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean();
cmfb.setConfigLocation(new ServletContextResource(servletContext, "/WEB-INF/ehcache.xml"));
cmfb.setShared(true);
return cmfb;
}
@Bean
AclAuthorizationStrategyImpl aclAuthorizationStrategy(){
return new AclAuthorizationStrategyImpl(new SimpleGrantedAuthority("ROLE_ADMINISTRATOR"), new SimpleGrantedAuthority("ROLE_ADMINISTRATOR"), new SimpleGrantedAuthority("ROLE_ADMINISTRATOR"));
}
@Bean
AclPermissionEvaluator permissionEvaluator() {
return new AclPermissionEvaluator(aclService());
}
@Bean
JdbcMutableAclService aclService() {
return new JdbcMutableAclService(dataSource, lookupStrategy(), aclCache());
}
@Bean
BasicLookupStrategy lookupStrategy(){
return new BasicLookupStrategy(dataSource, aclCache(), aclAuthorizationStrategy(), auditLogger());
}
/**
* Returns an expression handler based upon the specified role hierarchy and permission evaluator
* @return
*/
@Bean
public DefaultMethodSecurityExpressionHandler expressionHandler(){
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(permissionEvaluator());
expressionHandler.setRoleHierarchy(roleHierarchy());
return expressionHandler;
}
我正在使用 Spring 4.2.2、Hibernate Entitymanager 5.0.3 和 Spring Security 4.0.3。这该死的事情已经困扰我好几个小时了,我就是找不到解决办法。有什么想法我在这里遗漏了什么吗?
干杯,简
最佳答案
最后我找到了一个解决方案,主要是因为这篇 SO 帖子:Spring Hibernate - Could not obtain transaction-synchronized Session for current thread .
作者总结道:
Do not autowire beans into GlobalMethodSecurityConfiguration => they will not get intercepted properly afterwards.
这正是发生的事情。我的 CustomUserDetailsService
bean 在安全配置类中 Autowiring ,事务性 loadByUserName
方法停止工作,因为 TransactionInterceptor
忽略了这个 bean。
基本上,我将所有与 ACL 相关的内容与 @EnableGlobalMethodSecurity(prePostEnabled = true)
注释一起移动到一个单独的配置文件中,所有内容立即开始按预期工作(包括基于 ACL 的授权)。这让我非常头疼,我希望我能帮助别人解决这个问题。
关于java - 启用@EnableGlobalMethodSecurity 后,Hibernate 无法再获取 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850136/
我正在尝试在基于java的配置上配置@EnableGlobalMethodSecurity,但被注释的方法被方面忽略。我已经涵盖了相同 XML 配置通常遇到的所有问题,我的注释位于根上下文的安全配置部
有没有一种方法可以使用我的 config.properties 中的 boolean 值 securityEnabled 来禁用全局方法安全性?还有其他方法吗? @EnableWebSecurity
有没有一种方法可以使用我的 config.properties 中的 boolean 值 securityEnabled 来禁用全局方法安全性?还有其他方法吗? @EnableWebSecurity
我正在使用 Spring 4 开发 REST API。我想使用 Spring Security 保护一些端点,但根据我所读到的内容,这可以通过 @EnableGlobalMethodSecurity
这是我的代码: @Configuration @ComponentScan(basePackages = "com.webapp") @EnableWebSecurity @EnableGlobalM
我需要启用全局方法安全。 问题是当我添加注释时 @EnableGlobalMethodSecurity(prePostEnabled = true) - 我收到如下错误: Caused by: org
我正在尝试为 Spring Web 应用程序实现基于 ACL 的授权。一旦我将 @EnableGlobalMethodSecurity(prePostEnabled = true) 注释添加到我的安全
我使用 Spring Boot 3.0,当我进行安全配置时,我收到一条警告,提示 @EnableGlobalMethodSecurity 已弃用。 @Configuration @EnableWebS
我在使用 Spring Cloud 和 Spring OAuth2 的资源服务器方面遇到问题。我在想要保护的方法上有 PreAuthorize 注释,但 oauth2 表达式被忽略 正常表达式 (ha
我们正在尝试向 Spring 项目 Controllers 添加单元测试(顺便说一句,集成测试工作正常),但是当我们使用 添加配置时,我们遇到了非常奇怪的行为@EnableGlobalMethodSe
我是一名优秀的程序员,十分优秀!