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

安全注释@preauthorize在@controller中不生效,仅在带有Spring Security 3.2.5的@service中生效

酆高翰
2023-03-14

正如标题所暗示的那样。

Bellow是我的Spring Security配置:


@Configuration
@EnableGlobalMethodSecurity(proxyTargetClass = true, prePostEnabled = true)
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private AbstractAuthenticationProcessingFilter userPassAuthFilter;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.
                authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .csrf().disable();
        http.addFilterBefore(userPassAuthFilter, BasicAuthenticationFilter.class)
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

}

和我的控制器:


@RestController
@Transactional
public class RoleController {

    @Autowired
    private UserBusinessService userBusinessService

    @RequestMapping(value = "/api/list_users", method = RequestMethod.GET)
    @PreAuthorize("hasRole('N123ORMAL_ROLE1')")
    public Iterable listUsers() {
        return userBusinessService.getAllUsers();
    }

}

有了这一点,当尝试使用没有指定角色的用户访问/api/list_users时,它可以毫无问题地获得它。即使是原木也是完美的,没有注意到任何东西。当移动@preauthorizeUserBusinessServiceatgetallusers()中时,它的工作与预期一样:在日志中抛出错误并返回拒绝访问。

有人能帮我让@preauthorize批注对@controller和对@service一样工作吗?

共有1个答案

柳均
2023-03-14

我在@Transactional和@PostFilter中遇到了类似的问题。问题是aop建议排序问题。

这个问题在这方面帮助了我:Spring@事务性和Spring Security@预授权的顺序

我希望这有助于解决你的问题。

 类似资料:
  • 本文向大家介绍如何在controller中注入service?相关面试题,主要包含被问及如何在controller中注入service?时的应答技巧和注意事项,需要的朋友参考一下 在config services方法中配置这个service。 在controller的构造函数中,添加这个依赖注入。  

  • 我正在使用osgi和基于spring注释的配置。(使用virgo部署应用程序) @preauthorize方法impl上的注释不起作用。 尽管用户没有该角色,但它仍允许用户访问它。 如果我在接口上放置相同的注释,它会为所有用户抛出AccessDenied异常。例外情况: 这是我的配置: 我使用的是spring-security 3.0.4.Release

  • 请看下面我的命令输出: 从输出来看,JAVA_HOME已经设置为/usr/local/jdk-10.0.1,但是我为什么要使用这个命令: 我总是这样得到输出: 如何解决这个问题?

  • 我是一个新的探索Spring启动和冬眠,并面临一个问题,我认为这并不是新的。然而,在所有的建议都到位的情况下,我仍然找不到一个方法来解决我目前面临的问题。 你们谁能指出我错在哪里吗? 以下是场景- 我有一个Category类,并且Category类的每个实例可以有许多子Category的实例。 我已经使用@OneTomany注释设置了关系。然而,当试图将记录保存到数据库时,我面临的是org.hib

  • 是否有任何方法可以重用UserController方法,只需添加不同的安全性预授权,而无需为管理员重写这些方法?

  • 问题内容: 有没有办法在Eclipse中生成Javadoc注释?如果是这样,那是什么? 问题答案: 对我来说,还是- - (或- - 在Mac)的方法效果最好。 我不喜欢看到源代码中的Javadoc注释已自动生成并且尚未更新为真实内容。就我而言,此类javadocs仅仅是浪费屏幕空间。 IMO,最好在您填充细节时一一生成Javadoc注释框架。