At that time I was writing a Kotlin Spring backend application.
The admin url is protected with HTTP basic authentication.
After setting up Spring authentication configuration bean,
with a property configuration to load properties from
./gradlew bootRun to start the development server.
Surprisingly, I found that I can not use the username and password in the
application.properties to access the admin url.
The system just reported 401.
First I checked the Spring HTTP basic authentication configuration and property loading configuration. I was new to Spring and Kotlin, Besides Kotlin Spring tutorials are much less than Java Spring ones. But I could not see where is the problem. To ensure the HTTP basic authentication is set up correctly, I debug printed the username and password out. The output looked nice, which is:
(Spring info log...) "username" "password" (Spring info log...)
(You may have seen the problem.)
Just the same as my config in
I decided to do a little test: I replace the variables containing the username and password with literals.
Now it works fine!
I was confused: Why literals work but variables not?
After struggling for about 2h, I suddenly realized that the output
might be not the same as the str of "username".
"uesrname" indicated that the variable was just "\"username"\", including two quotes.
Take a look at my
application.properties, it contained:
which we should remove the quotes in. Property files just do not need quotes to specify a string. After removing the quotes, everything works fine.