Spring Boot 1.5.6.RELEASEを使用して、401
ではなくHTTPステータスコード403
を送信できました 認証なしでURIを要求した場合、Spring Security Responseを無許可にする(http 401コード 、これを行うことにより:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//...
http.exceptionHandling()
.authenticationEntryPoint(new Http401AuthenticationEntryPoint("myHeader"));
//...
}
}
org.springframework.boot.autoconfigure.security.Http401AuthenticationEntryPoint
クラスを使用します。
私は Spring Boot 2.0.0.RELEASE にアップグレードしましたが、そのようなクラスはもうありません(少なくともそのパッケージ内)。
質問:
このクラス(Http401AuthenticationEntryPoint
)はSpring Bootにまだ存在しますか?
いいえの場合、401
ではなくこのステータスコード(403
)に依存する他の実装との一貫性を保つために、既存のプロジェクトで同じ動作を維持するための良い代替案は何ですか?
クラスorg.springframework.boot.autoconfigure.security.Http401AuthenticationEntryPoint
が削除され、org.springframework.security.web.authentication.HttpStatusEntryPoint
が採用されました。
私の場合、コードは次のようになります。
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//...
http.exceptionHandling()
.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED));
//...
}
}
Http401AuthenticationEntryPoint
が削除されました。参照 10715 :
Http401AuthenticationEntryPointを削除します
rwinchが2017年10月20日にコメント
私の知る限り、Spring Bootコードベースでは使用されていないため、Http401AuthenticationEntryPoint
を削除することをお勧めします。
要件に応じて、次のものを使用できます。
@lealceldeiroの答えを詳しく説明するために:
Spring Boot 2以前は、Securiy Configurationクラスは次のようになっています。
@Configuration
public class MyConfig extends WebSecurityConfigurerAdapter {
@Bean
public Http401AuthenticationEntryPoint securityException401EntryPoint() {
return new Http401AuthenticationEntryPoint("Bearer realm=\"webrealm\"");
}
@Autowired
private Http401AuthenticationEntryPoint authEntrypoint;
@Override
protected void configure(HttpSecurity http) throws Exception {
// some http configuration ...
// Spring Boot 1.5.x style
http.exceptionHandling().authenticationEntryPoint(authEntrypoint);
}
//...
}
そして、Spring Boot 2では、次のようになります。
@Configuration
public class MyConfig extends WebSecurityConfigurerAdapter {
//Bean configuration for Http401AuthenticationEntryPoint can be removed
//Autowiring also removed
@Override
protected void configure(HttpSecurity http) throws Exception {
// some http configuration ...
// Spring Boot 2 style
http.exceptionHandling().authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED));
}
//...
}
こちらもご覧ください: https://github.com/spring-projects/spring-boot/issues/10715#issuecomment-363592444
これが機能するはずのAuthenticationEntryPointクラスをオーバーライドして、ロジックをカスタマイズできます。
@Component public class AuthEntryPointException implements AuthenticationEntryPoint, Serializable {
private static final long serialVersionUID = -8970718410437077606L;
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException {
response.setStatus(HttpStatus.SC_UNAUTHORIZED);
response.setContentType("application/json");
response.getWriter().write("{\"result\":\"UNAUTHORIZED\",\"message\":\"UNAUTHORIZED or Invalid Token\"}");
}
}