This article mainly introduces the solution to the cross-domain problem of single sign-on by separating the front-end and back-end of vue springboot. Friends who need it can refer to it
I have been working on a back-end management system recently, and the front-end is very popular nowadays. vue.js, the background is based on springboot. Because the backend system does not have a login function, but the company requires unified login, the login authentication uses the authentication system of the .net project team. That means doing single sign-on. As for students who don’t know what single sign-on is, I suggest you go to the all-purpose Du Niang.
When I first received this requirement, I thought with disdain: Just logging in is not important. However, the development process slapped me hard (a hot slap). . . , so I must record this lesson carefully this time to avoid stepping into such pitfalls in the future.
The first problem I faced was cross-domain. The browser console directly reported CORS. With my many years of development experience, I decisively configured the cross-domain configuration in the background. The code is as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
This configuration allows all mapping, all request headers, all request methods, and all sources. After changing the configuration, I decisively restarted the project to see the effect. I found that there was no way to redirect to the single sign-in page. Seeing that the browser error was caused by cross-domain, I first added the code of my login interceptor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
The front-end vue requests the back-end login interface directly using
1 |
|
and then the front-end accesses the system , you can jump directly to the single sign-on page. But when I entered my account and password and clicked to log in, I jumped back to the system and found that all request data interfaces could not be accessed normally. Debug found that all requests did not carry user information and were recognized by the interceptor as not logged in, so all requests could not pass. .
Why am I clearly logged in and the interceptor also sets user information to the session? Why are the cookies gone? I initiated a request again and found that the JsessionId of each request was different. After checking a lot of information, I found that I needed to add a configuration that allows authentication information to be added to the front end
1 |
|
The background also needs to make a corresponding configuration allowCredentials(true);
1 2 3 4 5 6 7 8 9 10 11 12 |
|
After adding this configuration, re-execute the operation process and find that it works normally after logging in. Jump to the system and the page data is displayed normally.
Just when I thought I was done, I suddenly clicked on a page and the data could not be displayed normally. I was so confused. I quickly F12 and found a request method I had never seen before, the OPTIONS request. It turns out that this request method is obviously POST, why did it become OPTIONS? So I ordered several other POST requests and found that they all turned into OPTIONS requests. I was confused and quickly checked the information of OPTIONS requests. The Internet said that OPTIONS requests are called "pre-check requests", which means that in your formal Before the request is executed, the browser will first initiate a pre-check request. Only after the pre-check request passes can the formal request be executed. After reading it, I suddenly realized that OPTIONS was intercepted, so I could no longer execute my POST request. Then I just let the pre-check request pass. Just add this judgment to the interceptor
1 2 3 4 |
|
In this way, if the interceptor finds that the request is a pre-check request, it will pass directly and the next step can be performed. POST request.
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
Solving the problem that webpack cannot access 127.0.0.1
##Using Async and Await function
Passing template to component in Angular
The above is the detailed content of How vue+springboot implements single sign-on cross-domain issues (detailed tutorial). For more information, please follow other related articles on the PHP Chinese website!