当前位置: 首页 > 知识库问答 >
问题:

spring@preauthorize不使用@enableGlobalMethodSecurity(prePostEnabled=true)

谷光誉
2023-03-14

下面是我的代码:

@Configuration
@ComponentScan(basePackages = "com.webapp")
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

 @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.
       authorizeRequests().antMatchers("/resources/**").permitAll().
       antMatchers("/admin/**").hasRole("ADMIN").
       anyRequest().authenticated().
       and().
       formLogin().loginPage("/login").permitAll().
       and().
       logout().permitAll();
}

@Autowired
public void configureGlobal(UserDetailsService userDetailsService, AuthenticationManagerBuilder auth)
        throws Exception {

    auth.userDetailsService(userDetailsService);

}
}

当请求/admin/*传入时,它将通过调用“AntMatchers(”/admin/**“).HasRole(”admin“)”来验证用户是否具有admin角色。,但在我的控制器中,它不检查用户是否拥有@preauthorize的其他权限。

@Controller
@SessionAttributes({ "user" })
@RequestMapping(value = "/admin/user")
public class UserController {

static Logger logger = LoggerFactory.getLogger(UserController.class);

@Autowired
private RoleDAO roleDao;

@Autowired
private MessageSource messageSource;

@Autowired
private UserDAO userDao;

@RequestMapping(value = { "/", "/list" }, method = RequestMethod.GET)
@PreAuthorize("hasRole('USER_VIEW')")
public ModelAndView listUsers() {

    List<User> users = userDao.list();
    ModelAndView model = new ModelAndView("/admin/user/user-list");
    model.addObject("users", users);
    if (model.getModel().get("user") == null) {
        model.getModel().put("user", new User());
    }
    this.loadRoles(model);
    return model;
}
}

共有1个答案

陆俊智
2023-03-14

通常,Spring Security性在根应用程序上下文中可用,而Spring MVC bean在子上下文中初始化。因此,org.springframework.security.config.annotation.configuration.AutoWireBeanFactoryObjectPostProcessor无法检测控制器bean,因为它们位于根上下文未知的子上下文中。

@enableGlobalMethodSecurity 必须放在Spring MVC配置所在的同一个配置类或xml文件中,才能启用@preauthorize@postauthorize

 类似资料:
  • 我实现了spring Security3.2.5,但不幸的是@preauthorize不能用于类和方法。正如我从文档中读到的,@preauthorize应该允许方法和类工作,如果用户在注释中有指定的角色,但我能够运行所有方法或类,而没有任何角色差异。您可以看到security-config.xml和security.context.xml以及我在下面声明@preauthorize注释的类。如果你能

  • 在Spring Web中,我使用@PreAuthorize with SpEl来检查当前用户的权限。类似这样的东西: 在RestController中: 现在我尝试使用WebFlux。写入了reactiveCheckPermission。 但是它抛出IllegalStateException("block()/block First()/block Final()是阻塞的,线程并行不支持 将boo

  • 当我在没有@EnableGlobalMethodSecurity注释的情况下运行我的应用程序时,它工作得很好。但是,我想添加对@secreted注释的支持,所以我想添加它。当我这样做时(如图所示),我开始立即在测试中获得这些异常。

  • 最近我发现有一种使用Spring Security预授权方法的方法。但我不确定我是否可以实现我想要的注释。

  • 在过去的几天里,我一直在进行故障排除,我似乎无法让表达式hasRole工作。我使用的是sping-Security 4.0.1 我的Spring Securityxml 我的所有角色都存储在数据库中,其模式类似于此链接中的1。在自定义的userDetailService中,我将从数据库中加载它。我的角色价值观是这样的 我甚至试着加上前缀“ROLE\uux”,但我似乎无法实现。 下面是关于如何使用h

  • 我的spring security xml 我的所有角色都存储在数据库中,并且有一个类似于此链接中的1的模式。在我的自定义中,我将从数据库加载它。我的角色价值观是这样的 我甚至尝试过把前缀“role_”,但我似乎不能让它工作。