2016-11-10 85 views
2
@Bean 
    public AuthenticationEntryPoint unauthorizedEntryPoint() { 
     return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED); 
    } 

如何理解這個(request, response, authException) ->,它在哪裏找到所有這3個變量?沒有在課堂上。瞭解用於定義Spring Security beans的java 8 lambda表達式

什麼是->

+0

閱讀一些有關依賴注入和Java 8 – AndreyS

+1

歡迎的Java 8這就是所謂的lambda表達式。 Java 8已經出現幾年了,所以你會發現大量的教程和文檔。 –

回答

4

AuthenticationEntryPoint是一個功能接口(一個只包含一個公共方法的接口:commence)。可以使用Java Lambda表達式創建功能接口類。

在前期的Java 8的編程風格,你可以使用一個anonymous class

@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; 
} 

這裏我們創建中,我們實施AuthenticationEntryPoint.commence()行爲的AuthenticationEntryPoint匿名類。

爪哇8 lambda表達式提供語法糖到代碼減少到剛好:調用時

return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED); 

request, response, authException將被提供給該方法。

此處瞭解詳情:https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html