Comprendre les expressions lambda java 8 utilisées pour définir les beans de sécurité Spring
@Bean
public AuthenticationEntryPoint unauthorizedEntryPoint() {
return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
Comment comprendre ce (request, response, authException) ->
, Où a-t-il trouvé toutes ces 3 variables? il n'y a pas dans le champ de la classe.
Et qu'est-ce que c'est ->
?
1 answers
AuthenticationEntryPoint
est une interface fonctionnelle (une interface contenant une seule méthode publique: commence
). Les classes d'interfaces fonctionnelles peuvent être créées à l'aide d'expressions Java Lambda.
Dans un style de programmation pré java 8, vous pouvez utiliser une classe anonyme :
@Bean
public AuthenticationEntryPoint unauthorizedEntryPoint() {
AuthenticationEntryPoint entryPoint = new AuthenticationEntryPoint() {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
};
return entryPoint;
}
Ici, nous créons une classe anonyme AuthenticationEntryPoint
dans laquelle nous implémentons le comportement de AuthenticationEntryPoint.commence()
.
Les expressions lambda Java 8 fournissent du sucre syntaxique pour réduire le code à juste:
return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
request, response, authException
sera fourni la méthode lorsqu'elle est appelée.
Plus d'infos ici: https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html