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

org.zodiac.autoconfigure.security.SecurityAuthenticationAutoConfiguration Maven / Gradle / Ivy

package org.zodiac.autoconfigure.security;

import java.util.Collection;
import java.util.Locale;

import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.userdetails.UserDetailsPasswordService;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.zodiac.autoconfigure.security.condition.ConditionalOnSecurityConfigEnabled;
import org.zodiac.commons.constants.Constants;
import org.zodiac.commons.util.Colls;
import org.zodiac.commons.util.ObjectUtil;
import org.zodiac.commons.util.lang.Strings;

@ConditionalOnSecurityConfigEnabled
@SpringBootConfiguration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass(value = {org.springframework.security.core.Authentication.class, org.springframework.security.config.annotation.SecurityBuilder.class, org.zodiac.security.config.SecurityConfigInfo.class})
public class SecurityAuthenticationAutoConfiguration extends org.zodiac.security.config.SecurityAuthenticationConfigurer {

    private final SecurityProperties securityProperties;
    private final WebMvcProperties webMvcProperties;

    public SecurityAuthenticationAutoConfiguration(SecurityConfigProperties securityConfigProperties,
        SecurityProperties securityProperties, WebMvcProperties webMvcProperties) {
        super(securityConfigProperties);
        this.securityProperties = securityProperties;
        this.webMvcProperties = webMvcProperties;
    }

    //@Bean(value = SecurityConstants.SPRING_SECURITY_MESSAGE_SOURCE_BEAN_NAME)
    //@Bean
    @Override
    protected MessageSource messageSource() {
        return super.messageSource();
    }

    @Bean
    @Override
    protected org.springframework.security.crypto.password.PasswordEncoder passwordEncoder() {
        return super.passwordEncoder();
    }

    @Bean
    @Override
    protected org.springframework.security.core.userdetails.UserDetailsService
        userDetailsService(ObjectProvider passwordEncoderProvider) {
        return super.userDetailsService(passwordEncoderProvider);
    }

    @Bean
    @Override
    protected UserDetailsPasswordService
        userDetailsPasswordService(ObjectProvider passwordEncoderProvider) {
        return super.userDetailsPasswordService(passwordEncoderProvider);
    }

    @Bean
    @Override
    protected AuthenticationProvider authenticationProvider(ObjectProvider passwordEncoderProvider,
        UserDetailsService userDetailsService, UserDetailsPasswordService userDetailsPasswordService,
        @Autowired(required = false) MessageSource messageSource) {
        return super.authenticationProvider(passwordEncoderProvider, userDetailsService, userDetailsPasswordService, messageSource);
    }

    @Override
    protected Collection
        obtainUserDetailsList(org.springframework.security.crypto.password.PasswordEncoder passwordEncoder) {
        Collection userDetailsList =
            super.obtainUserDetailsList(passwordEncoder);
        if (null == userDetailsList) {
            userDetailsList = Colls.set();
        }
        SecurityProperties.User user = securityProperties.getUser();
        org.springframework.security.core.userdetails.UserDetails userDetails =
            org.springframework.security.core.userdetails.User.withUsername(user.getName())
                .password(getOrDeducePassword(user, passwordEncoder)).roles(Strings.toStringArray(user.getRoles()))
                .build();
        userDetailsList.add(userDetails);
        return userDetailsList;
    }

    private String getOrDeducePassword(SecurityProperties.User user,
        org.springframework.security.crypto.password.PasswordEncoder passwordEncoder) {
        String password = user.getPassword();
        if (user.isPasswordGenerated()) {
            log.info(String.format("%n%nUsing generated security password: %s%n", user.getPassword()));
        }
        if (passwordEncoder != null) {
            /*密码编码器不为空,使用加密密码存储。*/
            String encodedPassword = passwordEncoder.encode(password);
            return encodedPassword;
        }
        return org.zodiac.security.constants.SecurityConstants.NOOP_PASSWORD_PREFIX + password;
    }

    @Override
    protected Locale getDefaultLocale() {
        Locale defaultLocale = ObjectUtil.defaultIfNull(webMvcProperties.getLocale(), Constants.Zodiac.DEFAULT_LOCALE);
        return defaultLocale;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy