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 ->?

Author: codependent, 2016-11-10

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

 4
Author: codependent, 2016-11-10 09:13:18