Spring Boot自定义授权标头请求根本没有通过

时间:2017-09-30 03:24:45

标签: spring rest spring-boot spring-security

所以我有一个Spring Boot应用程序,我正在使用PostMan向它发送请求。它使用Spring Security和JWT进行身份验证。我试图获得授权,但遇到了问题。 Spring能够登录用户并返回令牌。但是,当我将令牌放入标题时,它根本不起作用。我得不到服务器的回复。删除令牌后,它可以正常工作。现在,无论是否登录,所有请求都应该能够完成。

我的Spring Web配置:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurity extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
        .addFilter(new JWTAuthenticationFilter(authenticationManager()))
        .addFilter(new JWTAuthorizationFilter(authenticationManager()));
    }
}

我尝试访问的REST路径:

@RestController("threadService")
@RequestMapping("/api/thread")
public class ThreadService {
    @RequestMapping(value="/list", method=RequestMethod.GET)
    public List<ThreadDetails> getThreadList() {
        logger.info("getThreadList");
        return threadDao.getThreadList();
    }
}

我登录并获得令牌后发出的GET请求失败:

GET /api/thread/list HTTP/1.1
Host: localhost:8080
Authorization : Bearer (JWT token here)
Cache-Control: no-cache
Postman-Token: 69565839-4806-b4f6-9a03-11382a80c7da

如果标题中没有授权,上述请求可以正常工作。

1 个答案:

答案 0 :(得分:0)

不确定这正是我面临的问题。 当我想与Spring Boot应用程序公开的restservice通信时,未设置“授权”。我遵循了通信所需的步骤,但该值不会通过标头传递。

我找到的解决方案“通用编解码器”库丢失了。在我的Web应用程序中添加依赖项后,它将开始将标头中的“授权”发送到我的Spring Boot应用程序。 希望这对某人有帮助。