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

club.zhcs.lina.starter.auth.AuthAutoConfiguration Maven / Gradle / Ivy

package club.zhcs.lina.starter.auth;

import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

import com.auth0.jwt.algorithms.Algorithm;

import club.zhcs.lina.auth.aop.TokenAuthInterceptor;
import club.zhcs.lina.auth.encode.PasswordMatcher;
import club.zhcs.lina.auth.jwt.AlgorithmicJWTGenerator;
import club.zhcs.lina.auth.jwt.JWTGenerator;
import club.zhcs.lina.auth.service.AuthService;
import club.zhcs.lina.auth.service.DefaultAuthService;
import club.zhcs.lina.auth.service.UserDetailService;
import club.zhcs.lina.starter.oidc.OpenIDConnectAutoConfiguration;
import jakarta.servlet.http.HttpServletRequest;

/**
 * @author Kerbores ([email protected])
 *
 */
@AutoConfiguration
@EnableConfigurationProperties(AuthAutoConfigurationPeroperties.class)
@AutoConfigureAfter(OpenIDConnectAutoConfiguration.class)
public class AuthAutoConfiguration {

    @Bean
    @ConditionalOnBean(AuthService.class)
    TokenAuthInterceptor tokenAuthInterceptor(AuthService authService, AuthAutoConfigurationPeroperties configurationPeroperties) {
        return new TokenAuthInterceptor(authService, configurationPeroperties.getWithoutAuthenticationUrlRegulars());
    }

    @Bean
    @ConditionalOnMissingBean
    PasswordMatcher passwordMatcher() {
        return new PasswordMatcher() {};
    }

    @Bean
    @ConditionalOnMissingBean
    Algorithm algorithm(AuthAutoConfigurationPeroperties config) {
        return Algorithm.HMAC256(config.getJwt().getPassword());
    }

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnBean(Algorithm.class)
    JWTGenerator jwtGenerator(AuthAutoConfigurationPeroperties config, Algorithm algorithm) {
        return AlgorithmicJWTGenerator.builder()
                                      .term(config.getJwt().getTerm())
                                      .unit(config.getJwt().getUnit())
                                      .issuer(config.getJwt().getIssuer())
                                      .algorithm(algorithm)
                                      .build();
    }

    @Bean
    @ConditionalOnBean(UserDetailService.class)
    @ConditionalOnMissingBean
    AuthService authService(UserDetailService userDetailService, JWTGenerator jwtGenerator, HttpServletRequest request) {
        return new DefaultAuthService(jwtGenerator, request, userDetailService);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy