zhuo
2025-04-22 d55fe4255a7fa2b1a9c7a8f5d00a0b7683649e2d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.ruoyi.framework.web.ssoAuth;
 
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.AuthenticationException;
public class SsoCodeAuthenticationProvider implements AuthenticationProvider {
 
    private UserDetailsService userDetailsService;
 
    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        SsoCodeAuthenticationToken authenticationToken = (SsoCodeAuthenticationToken) authentication;
 
        String openId = (String) authenticationToken.getPrincipal();
 
        UserDetails userDetails = userDetailsService.loadUserByUsername(openId);
 
        // 此时鉴权成功后,应当重新 new 一个拥有鉴权的 authenticationResult 返回
        SsoCodeAuthenticationToken authenticationResult = new SsoCodeAuthenticationToken(userDetails, userDetails.getAuthorities());
 
        authenticationResult.setDetails(authenticationToken.getDetails());
 
        return authenticationResult;
    }
 
 
    @Override
    public boolean supports(Class<?> authentication) {
        // 判断 authentication 是不是 SsoCodeAuthenticationToken 的子类或子接口
        return SsoCodeAuthenticationToken.class.isAssignableFrom(authentication);
    }
 
    public UserDetailsService getUserDetailsService() {
        return userDetailsService;
    }
 
    public void setUserDetailsService(UserDetailsService userDetailsService) {
        this.userDetailsService = userDetailsService;
    }
}