2017-12-22 9 views
0

私はユーザー認証のためのコードを書いています。Spring WEB MVC +生成= MediaType.IMAGE_JPEG_VALUE + @ResponseStatus(HttpStatus.FORBIDDEN)= HTTPステータス406

@RestController 
public class CurrentUserController { 

    @PostMapping(value = "update-2fa-secret", produces = MediaType.IMAGE_JPEG_VALUE) 
    public byte[] update2FaSecret() { 
     UserEntity user = userRepository.findOne(currentUserId); 
     if (user.is2FaEnabled() != Boolean.TRUE) 
      throw new HttpForbiddenException("2fa disabled for current user"); 
     String secret = createNewSecret(); 
     user.setSecret2Fa(secret); 
     userRepository.save(user); 
     return createQRCode(secret, user.getEmail()); 
    } 
} 

と例外:

@ResponseStatus(HttpStatus.FORBIDDEN) 
public class HttpForbiddenException extends RuntimeException { 
............ 
} 

と例外が発生したとき、私は406のHTTPステータスととせずに、サーバーからの応答を取得2を持つユーザーは、許可は、私が2FA秘密の更新のためのコードを書いて有効に織り込まについて本文(内容)。

なぜこのようなことが起こり、どのように解決するのか分かりません。誰かが私にそれを説明できますか?

+0

406はhttps://stackoverflow.com/questions/14251851/what-is-406-not-acceptable-を参照して、コンテンツ受け入れられないことを意味response-in-httpは、適切なContent-Typeヘッダー –

+0

'@ PostMapping'を追加することができます。あなたはコントローラーメソッドに何を投稿していますか? –

+0

@ロッシ私はここで 'POST 'を使うことに決めました.GETの場合には、Skypeを使ってリンクを提供することができるからです。 –

答えて

0

私は次の方法でこの問題を解決しました:

@RestController 
public class CurrentUserController { 

    @PostMapping(value = "update-2fa-secret", produces = MediaType.IMAGE_JPEG_VALUE) 
    public byte[] update2FaSecret(HttpServletResponse response) { 
     UserEntity user = userRepository.findOne(currentUserId); 
     if (user.is2FaEnabled() != Boolean.TRUE) { //fix is here 
      response.setStatus(HttpStatus.FORBIDDEN.value()); //403 
      return new byte[0]; 
     }    
     String secret = createNewSecret(); 
     user.setSecret2Fa(secret); 
     userRepository.save(user); 
     return createQRCode(secret, user.getEmail()); 
    } 
} 
関連する問題