All Downloads are FREE. Search and download functionalities are using the official Maven repository.

club.zhcs.lina.starter.oidc.OpenIDConnectAutoConfiguration Maven / Gradle / Ivy

There is a newer version: 3.3.4
Show newest version
package club.zhcs.lina.starter.oidc;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.nutz.lang.Strings;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Lazy;

import club.zhcs.lina.auth.UserDetailService;
import club.zhcs.lina.auth.jwt.JWTGenerator;
import club.zhcs.lina.auth.service.AuthService;
import club.zhcs.lina.oidc.OpenIDConnectController;
import club.zhcs.lina.oidc.callback.CallbackHanlder;
import club.zhcs.lina.oidc.callback.CookieCallbackHanlder;
import club.zhcs.lina.oidc.callback.RedirctToFrontCallbackHanlder;
import club.zhcs.lina.oidc.service.CacheableOpenidConnectionAuthService;
import club.zhcs.lina.oidc.service.IAMUserDetailService;
import club.zhcs.lina.oidc.service.OpenIDConnectService;
import club.zhcs.lina.starter.auth.AuthAutoConfiguration;
import lombok.RequiredArgsConstructor;

/**
 *
 */
@AutoConfiguration
@RequiredArgsConstructor
@ConditionalOnExpression("${lina.oidc.enabled:false}")
@AutoConfigureBefore(AuthAutoConfiguration.class)
@EnableConfigurationProperties(OpenIDConnectConfigurationProperties.class)
public class OpenIDConnectAutoConfiguration {

    private final OpenIDConnectConfigurationProperties config;

    @Bean
    @Lazy
    OpenIDConnectService openIDConnectService() {
        return new OpenIDConnectService(config.getDiscoveryUrl(), config.getClientId(), config.getClientSecret(), config.getRedirectUrl());
    }

    @Bean
    @Lazy
    @ConditionalOnMissingBean
    JWTGenerator jwksJWTGenerator(OpenIDConnectService openIDConnectService) {
        return openIDConnectService.jwtGenerator();
    }

    @Bean
    @Lazy
    @ConditionalOnMissingBean
    AuthService cacheableOpenidConnectionAuthService(JWTGenerator jwtGenerator,
                                                     UserDetailService userDetailService,
                                                     HttpServletRequest request,
                                                     HttpServletResponse response) {
        return new CacheableOpenidConnectionAuthService(jwtGenerator,
                                                        config.getCookieSettings(),
                                                        request,
                                                        response,
                                                        userDetailService);
    }

    @Bean
    @ConditionalOnMissingBean
    UserDetailService userDetailService() {
        String prefix = config.getUserDetailEndpiontPrefix();
        return new IAMUserDetailService((Strings.isBlank(prefix) ? config.iam() : prefix) + "/open/%s/token/user-info", config.getClientId());
    }

    @Bean
    CallbackHanlder callbackHandler(AuthService authService, OpenIDConnectService openIDConnectService) {
        if (config.getCallbackHanlderType() == OpenIDConnectConfigurationProperties.Type.COOKIE) {
            return new CookieCallbackHanlder(config.getHanlderSuccessPage(), openIDConnectService, authService);
        }
        return new RedirctToFrontCallbackHanlder(config.getHanlderSuccessPage());
    }

    @Bean
    @Lazy
    OpenIDConnectController openIDConnectController(OpenIDConnectService openIDConnectService,
                                                    CallbackHanlder callbackHandler,
                                                    AuthService authService) {
        return new OpenIDConnectController(openIDConnectService, callbackHandler, authService);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy