spring-security postman中不支持的媒体类型

rur96b6h  于 2022-11-11  发布在  Spring
关注(0)|答案(7)|浏览(229)

我正在用oauth2和jwt实现spring security。下面是我的登录函数。

function doLogin(loginData) {

    $.ajax({
        url :  back+"/auth/secret",
        type : "POST",
        data : JSON.stringify(loginData),
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        async : false,
        success : function(data, textStatus, jqXHR) {

            setJwtToken(data.token);

        },
        error : function(jqXHR, textStatus, errorThrown) {
            alert("an unexpected error occured: " + errorThrown);
            window.location.href= back+'/login_page.html';
        }
    });
}

下面是控制器

@RequestMapping(value = "auth/secret", method = RequestMethod.POST)
    public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtAuthenticationRequest authenticationRequest, Device device) throws AuthenticationException {
        System.out.println();
        logger.info("authentication request : " + authenticationRequest.getUsername() + " " + authenticationRequest.getPassword());
        // Perform the security
         System.out.println( authenticationRequest.getUsername()+"is the username and "+authenticationRequest.getPassword());
        final Authentication authentication = authenticationManager.authenticate(
                new UsernamePasswordAuthenticationToken(
                        authenticationRequest.getUsername(),
                        authenticationRequest.getPassword()

                        )

        );
        SecurityContextHolder.getContext().setAuthentication(authentication);

        logger.info("authentication passed");

        // Reload password post-security so we can generate token
        final UserDetails userDetails = userDetailsService.loadUserByUsername(authenticationRequest.getUsername());
        final String token = jwtTokenUtil.generateToken(userDetails, device);
        logger.info("token " + token);

        // Return the token
        return ResponseEntity.ok(new JwtAuthenticationResponse(token));
    }

但当我尝试向 Postman 发送邮件请求时,它显示

{
  "timestamp": 1488973010828,
  "status": 415,
  "error": "Unsupported Media Type",
  "exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
  "message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryY4KgeeQ9ONtKpvkQ;charset=UTF-8' not supported",
  "path": "/TaxiVis/auth/secret"
}

但是当我在 AJAX 调用中执行cosole.log(data)时,它会打印令牌吗?我不知道出了什么问题。任何帮助都将不胜感激。

bis0qfac

bis0qfac1#

您需要在postman中将content-type设置为JSON(application/json)。
转到POST请求中的主体,在那里您将找到raw选项。
在它的旁边,将有一个下拉菜单,选择JSON(application.json)。

i5desfxk

i5desfxk2#

Http 415 Media Unsupported只有在应用程序不支援您提供的内容类型信头时才会回应。
在POSTMAN中,你发送的Content-type头是Content type 'multipart/form-data而不是application/json。而 AJAX 代码中,你把它正确地设置为application/json。在POSTMAN中传递正确的Content-type头,它就会工作。

xe55xuns

xe55xuns3#

我也得到了这个错误。我在更改为XML(text/xml)后使用了正文内的文本,得到了预期的结果。

  • 如果您的请求是XML请求,请使用XML(text/xml)。
  • 如果您的请求是JSON请求,请使用JSON(application/json)
3gtaxfhh

3gtaxfhh4#

如果在调用SOAP端点时仍因postman中不支持的媒体类型而失败,则可以尝试:

内容类型:应用程序/soap+xml

oxalkeyp

oxalkeyp5#

我遇到了这个问题。我在身份验证选项卡上设置了身份验证,以在正文中传递凭据。
当我将Body设置为None时,出现此错误。
因此,我需要在postman中设置一个空的主体,并将其设置为原始JSON,这样即使我的主要请求是querystring中的参数,也可以正常工作。

{
}
hpcdzsge

hpcdzsge6#

我也有类似的问题。在我的情况下,我做了两个改变
单击头标记并添加一个值为“application/json”的键“Content-Type”

第二步是单击Body选项卡,选择“raw”单选按钮,然后从下拉列表中选择“JSON”类型,如下所示

0s0u357o

0s0u357o7#

当我在XML中进行这种操作时;
我只是将“应用程序/XML”更改为“文本/XML,”
解决了我的问题。

相关问题