【问题标题】:Spring Security Authentication not give 401 errorSpring Security Authentication 不给出 401 错误
【发布时间】:2016-01-18 18:24:04
【问题描述】:

在过滤器中,我在 spring 安全上下文中添加了以下角色。

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
            throws IOException, ServletException {
        GrantedAuthority authority = new SimpleGrantedAuthority(ANONYMOUS);
        List<GrantedAuthority> grantedAuthority = new ArrayList<>();
        grantedAuthority.add(authority);
        Authentication authentication = new AnonymousAuthenticationToken(ANONYMOUS, ANONYMOUS, grantedAuthority);   
        SecurityContextHolder.getContext().setAuthentication(authentication);
        arg2.doFilter(arg0,arg1);
    }

然后从控制器中的一个rest api方法,我检查授权角色如下,

@RestController
@RequestMapping(value = "/api")
public class MyController { 
    @RequestMapping(value = "/myservice1", method = RequestMethod.GET)
    @PreAuthorize("hasRole('ROLE_USER')")   
    public HttpEntity<String> myService() {
        System.out.println("-----------myService invoke-----------");
        return new ResponseEntity<String>(HttpStatus.OK);
    }
}

但是当我调用上面的 API 时,它成功地打印了系统输出。但它应该给我一个 401 未经授权的错误吧?

【问题讨论】:

  • 您是否启用了方法级别的安全性?
  • 在 SecurityConfig 类中添加 @EnableGlobalMethodSecurity(prePostEnabled = true) 后,它可以工作。如果您可以将其添加到 asnwer 我将接受它。谢谢

标签: java spring spring-security spring-boot


【解决方案1】:

只需通过以下方式启用方法级安全性:

@EnableGlobalMethodSecurity(prePostEnabled = true)

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 2019-07-12
    • 1970-01-01
    • 2019-10-13
    • 2015-12-11
    • 2011-11-25
    • 2016-02-20
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多