Spring Security的高级认识,在上一篇我们已经初步的了解到了Spring Secuity

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,第三方应用
  1. 用户访问 Client
  2. Client 向该用户请求/申请授权
  3. 用户同意 Client 授权申请
  4. Client 向 Provider 的 Authorization Server 申请令牌
  5. Provider 向 Client 发放令牌
  6. Client 向 Provider 的 Resource Server 申请获取资源
  7. Provider 向 Client 开放资源
  8. Client 持续携带令牌访问 Provider 上的资源。

OAuth 协议中的四种授权模式(涉及上述第 2 步):

  • 授权码模式(功能最完整,流程最严密,应用最广泛)
  • 密码模式
  • 客户端模式
  • 简化模式

授权码模式:

授权码的模式的特点在于,“用户同意 Client 授权申请” 的过程是 用户 - Client - Provider 三方之间的交流:

  • 用户访问 Client 之后,Client 会将用户导向 Provider,Provider 向用户询问是否对 Client 授权
  • 用户同意授权后,Provider 向 Client 返回一个授权码。
  • Client 再用授权码申请 Token
  • Provider 确认授权码后发放 Token
  • Client 携带 Token 访问用户在 Provider 上的资源

第三方登录原理

 

你可能感兴趣的:(spring,过滤器,Spring)