前言:在给注册服务后台加安全验证,遇到的一些问题
设置了账密,无法进入后台
可以看一下项目启动时控制台有没有默认密码。如果有,很有可能是自定义配置有问题,导致未生效。
请尝试使用 账户:user ,密码:控制台默认密码进行登录,如果可以进入,证明确实设置有问题。
我是参考网友的设置,如下
spring:
security:
user:
name: russell # 用户名
password: 123456 # 用户密码
basic:
enabled: true
但好像有问题,一直在登录界面反复。后来无意间删了spring随便试试:
security:
user:
name: russell # 用户名
password: 123456 # 用户密码
basic:
enabled: true
如上,security一定顶头,否则报错,然后启动。控制台不再打印默认密码,此时感觉应该生效了,输入账密,成功登录。
额外补充:
1.安全校验依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
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标签,这两处对我帮助很大):
<?xml version="1.0" encoding="UTF-8"?>
<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>
<!-- SpringBoot 项目 统一 父依赖 -->
<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>
<!-- SpringCloud Eureka 注册中心依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!-- SpringBoot Test 测试框架 依赖 -->
<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>
<!-- SpringCloud 所有子项目 版本集中管理.MS:统一所有SpringCloud依赖项目的版本 依赖-->
<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>
<!-- SpringBoot 项目打jar包的Maven插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!-- SpringBoot项目打包jar名称 -->
<finalName>eureka</finalName>
</build>
<!-- SpringCloud 官方远程仓库.MS:部分本地仓库和镜像仓库没有SpringCloud子项目依赖。 -->
<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的你不那么备受折磨哈哈哈。