SpringBoot2集成nacos(二)

7 篇文章 1 订阅
5 篇文章 0 订阅

在上一篇中,集成nacos用的是springboot的配置文件,在配置文件中有几个项是必须要配置的,否则启动不成功。

另一种集成方式是,用javaconfig的方式:

@SpringBootApplication
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "192.168.xxx.xxx:8848",namespace = "32a9fc67-5fc9-47a7-947b-863364d93a88"))
@NacosPropertySource( autoRefreshed = true, groupId="AUTH_CENTER", dataId = "ykylogic-auth",type = ConfigType.YAML)
public class YkyAuthServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(YkyAuthServerApplication.class, args);
	}

}

 

 在使用时,用@NacosValue,参考下边的类,该类是在登录时多用ras非对称加密方式对用户传过来的密文密码先解密,然后再用DESede加密被解密后的密码,最后与数据库存储的DESede加密密码对比,rsa的公钥是对外公布的,其密钥存在服务端nacos配置中心,此处是利用了@NacosValue来获取配置中心rsa的密钥。(我下边的CustomDaoAuthenticationProvider 上没有注解,但在其他地方已配置其为spring的bean)

/**  
* <p>Title: CustomDaoAuthenticationProvider.java</p>  
* <p>Description: </p>   
* @author wangzhj
* @date 2020年5月11日  
* @version 1.0  
*/  
 package com.yky.auth.service;

import org.apache.commons.codec.binary.Base64;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;

import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.yky.auth.util.Encrypter;


/**  
* <p>Title: CustomDaoAuthenticationProvider</p>  
* <p>Description: </p>  
* @author wangzhj 
* @date 2020年5月11日  
*/
public class CustomDaoAuthenticationProvider extends DaoAuthenticationProvider {
    
    @NacosValue(value = "${rsa.private.key}", autoRefreshed = true)
    private String privateKey;
    
    protected void additionalAuthenticationChecks(UserDetails userDetails,
            UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
        if (authentication.getCredentials() == null) {
            logger.debug("Authentication failed: no credentials provided");

            throw new BadCredentialsException(messages.getMessage(
                    "AbstractUserDetailsAuthenticationProvider.badCredentials",
                    "Bad credentials"));
        }
        
        String name = userDetails.getUsername();
        String password = authentication.getCredentials().toString();
        
        
        try {
            password = new String(Encrypter.decryptRSAByPrivateKey(Base64.decodeBase64(privateKey), Base64.decodeBase64(password)));
        } catch (Exception e1) {
            throw new BadCredentialsException(messages.getMessage(
                "AbstractUserDetailsAuthenticationProvider.badCredentials",
                "Bad credentials"));
        }
        
        String encodePassword;
        try {
            encodePassword = new String(Encrypter.byteToHex(
                Encrypter.encryptMode(Encrypter.stringToByte(name + password), password.getBytes())));
        } catch (Exception e) {
            throw new BadCredentialsException(messages.getMessage(
              "AbstractUserDetailsAuthenticationProvider.badCredentials",
              "Bad credentials"));
        }
        
        if(!encodePassword.equals(userDetails.getPassword())) {
            logger.debug("Authentication failed: password does not match stored value");
            
                        throw new BadCredentialsException(messages.getMessage(
                                "AbstractUserDetailsAuthenticationProvider.badCredentials",
                                "Bad credentials"));
        }

    }


    

}

nacos配置中心yaml格式的密钥:

rsa:
  private:
    key: MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA8A7YBYYdIGiVCRsbggMJna/SDR5SmLhr6QMblcIdpvF9JbnEpi/CETILTINxw+bYzM8zEDv+464FIwLleYLRHwIDAQABAkEAhkl3dFeasYdvX4GneKokVe6FzUraH46C5v0TEEpfdgPpdPFKglhJMVH7hvUobAfmW4ZYCiV70eXaVm+h8BjhCQIhAP3UZfSFodq/6w8bEVwdJ1B1uvtgu9Ps6Nzq4Rt4qY3DAiEA8hxNEHojq0RvPFFIajvfaCOYncWnWyhA1F3akysjbXUCIAENsJ6jL1jJEyCs7BWFyXP8CRqh/CWVBiJklyqWBZ4hAiEAhCD51cIycSd55VsewAtI0xaKFaBmwxLmvn8x6BskzHkCIQCHZWLc+r0P9UiWIRke1K/fovWYnADzSvqNfP3bbVnJZw==

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一款基于Spring框架的开发工具,可以简化Java应用程序的开发过程。而Nacos是阿里巴巴开源的一款服务发现和配置管理平台。以下是关于如何在Spring Boot集成Nacos的步骤: 1. 首先,需要在Spring Boot的项目中添加Nacos的客户端依赖。可以在项目的pom.xml文件的dependencies中添加以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` 2. 在Spring Boot的配置文件application.properties中,添加Nacos的相关配置信息,包括Nacos的服务地址、应用的命名空间等。例如: ```properties spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.namespace=my-namespace ``` 3. 在Spring Boot的启动类中,使用@EnableDiscoveryClient注解启用Nacos的服务发现功能。例如: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 4. 接下来,可以通过注入NacosConfigManager来读取Nacos中的配置信息。例如: ```java import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @NacosPropertySource(dataId = "example", autoRefreshed = true) public class ConfigController { @Autowired private ConfigService configService; @GetMapping("/config") public String getConfig() { String config = configService.getConfig("example", "test-group", 5000); return config; } } ``` 以上就是在Spring Boot集成Nacos的基本步骤。通过这种方式,我们可以方便地使用Nacos来管理和获取配置信息,同时也可以轻松地实现服务的注册与发现功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值