初次接触Eureka及安全验证所遇到的问题及方案记录
前言:在给注册服务后台加安全验证,遇到的一些问题
设置了账密,无法进入后台
可以看一下项目启动时控制台有没有默认密码。如果有,很有可能是自定义配置有问题,导致未生效。
请尝试使用 账户:user ,密码:控制台默认密码进行登录,如果可以进入,证明确实设置有问题。
我是参考网友的设置,如下
spring: security: user: name: russell # 用户名 password: 123456 # 用户密码 basic: enabled: true
但好像有问题,一直在登录界面反复。后来无意间删了spring随便试试:
security: user: name: russell # 用户名 password: 123456 # 用户密码 basic: enabled: true
如上,security一定顶头,否则报错,然后启动。控制台不再打印默认密码,此时感觉应该生效了,输入账密,成功登录。
额外补充:
1.安全校验依赖包
org.springframework.boot spring-boot-starter-security
2.其他异常
这个查资料说是依赖包默认开启了防csrf攻击,需要增加配置类对WebSecurityConfigurerAdapter进行实现,重写对应的方法:
这里是创建了一个config配置管理类
可以把需要的配置成内部类用来管理(感觉也没啥用,就感觉内部类可以有多个public,觉得神奇),也可以直接将里面的类创建,加上@Configuration注解就可以。另一个注解就是安全注解:@EnableWebSecurity
@EnableWebSecurity public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { // 关闭csrf http.csrf().disable(); // 开启认证 mvcMatchers("") 配置放行规则 http.authorizeRequests().mvcMatchers("/eureka/").permitAll().anyRequest().authenticated().and().httpBasic(); super.configure(http); } }
3.一开始加入配置
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
当时 parent 管理的版本是2.6.0好像。
启动eureka 提示某个类不存在,查资料说是版本问题,更换版本又会引入其他问题。最后参考了博友配置得以解决。完整配置如下(大家可参考parent和dependencyManagement标签,这两处对我帮助很大):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.russell.eureka</groupId> <artifactId>eureka</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <description>eureka project for Spring Boot</description> <name>springcloud-eureka</name> <url>https://repo.spring.io/milestone</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <finalName>eureka</finalName> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
4.解决客户端服务注册问题
在安全验证后,客户端会出现无法连接服务问题
说是在yml配置,将注册服务地址加入用户名:密码@
格式如下:
eureka: client: service-url: defaultZone: http://user:af40b358-77bb-4c4f-b124-19bc18faae4d @127.0.0.1:8100/eureka`在这里插入代码片`在这
至此,可以解决客户端注册服务异常的问题。
目前主要遇见这几个比较棘手的问题,希望有用,能让同样初次接触eureka的你不那么备受折磨哈哈哈。