Spring Security的高階認識,在上一篇我們已經初步的瞭解到了Spring Secuity
阿新 • • 發佈:2018-12-05
2 自定義登入成功處理
預設情況下,登入成功後,Spring Security 會跳轉到之前引發登入的那個請求上。
AuthenticationSuccessHandler
@Component("myAuthenticationSuccessHandler") public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler { @Autowired private ObjectMapper objectMapper; @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { System.out.println("登入成功"); response.setContentType("application/json;charset=UTF-8"); response.getWriter().write(objectMapper.writeValueAsString(authentication)); } }
@Configuration @EnableWebSecurity @ComponentScan("com.sxnd.authentication") public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired @Qualifier("myAuthenticationSuccessHandler") private AuthenticationSuccessHandler successHandler; @Bean("objectMapper") public ObjectMapper objectMapper() { return new ObjectMapper(); } ... @Override protected void configure(HttpSecurity http) throws Exception { http .formLogin() .loginPage("/sign-in.html") .loginProcessingUrl("/login") .successHandler(successHandler) .and() ... } }
簡訊驗證碼登入
生成 - 存session - 傳送
Spring Social 開發第三方登入
OAuth
使用者名稱密碼授權的問題:
- 應用可以訪問使用者在微信上的所有資料
- 使用者只有修改密碼,才能收回授權(但又會引起其他問題)
- 密碼洩露的可能性大大增加
使用者給 APP 的是token,而不再是使用者名稱密碼。App 通過攜帶token去訪問微信自拍照片。token中可以設定有效期。
- Provider,服務提供商(例如,微信)
- Authorization Server(認證,發令牌)
- Resource Server(儲存資源)
- Resource,資源(例如,微信自拍照片)
- Resource Owner,資源所有者(例如,微信使用者。注意,自拍照片的所有者並非微信)
- Client,第三方應用
- 使用者訪問 Client
- Client 向該使用者請求/申請授權
- 使用者同意 Client 授權申請
- Client 向 Provider 的 Authorization Server 申請令牌
- Provider 向 Client 發放令牌
- Client 向 Provider 的 Resource Server 申請獲取資源
- Provider 向 Client 開放資源
- Client 持續攜帶令牌訪問 Provider 上的資源。
OAuth 協議中的四種授權模式(涉及上述第 2 步):
- 授權碼模式(功能最完整,流程最嚴密,應用最廣泛)
- 密碼模式
- 客戶端模式
- 簡化模式
授權碼模式:
授權碼的模式的特點在於,“使用者同意 Client 授權申請” 的過程是 使用者 - Client - Provider 三方之間的交流:
- 使用者訪問 Client 之後,Client 會將使用者導向 Provider,Provider 向用戶詢問是否對 Client 授權
- 使用者同意授權後,Provider 向 Client 返回一個授權碼。
- Client 再用授權碼申請 Token
- Provider 確認授權碼後發放 Token
- Client 攜帶 Token 訪問使用者在 Provider 上的資源
第三方登入原理