拦截器实现登录拦截和跨域问题
发布人:shili8
发布时间:2025-03-11 21:45
阅读次数:0
**拦截器实现登录拦截和跨域问题**
在开发Web应用程序时,经常会遇到登录拦截和跨域问题。登录拦截是指当用户未登录时,访问某些页面或接口时,系统需要进行登录验证;跨域问题是指不同域名之间的资源共享问题。在本文中,我们将使用拦截器实现登录拦截和跨域问题。
**登录拦截**
登录拦截是指当用户未登录时,访问某些页面或接口时,系统需要进行登录验证。我们可以使用拦截器来实现此功能。
### 登录拦截器
java// LoginInterceptor.javaimport javax.servlet. />import javax.servlet. />
public class LoginInterceptor implements HandlerInterceptor {
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response) {
// 判断用户是否登录 if (request.getSession().getAttribute("user") == null) {
// 未登录,跳转到登录页面 return false;
}
return true;
}
}
### 配置拦截器
java// WebConfig.javaimport org.springframework.context.annotation.Configuration;
@Configurationpublic class WebConfig implements WebMvcConfigurer {
@Override public void addInterceptors(InterceptorRegistry registry) {
// 添加登录拦截器 registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/admin/**");
}
}
### 登录页面
html<!-- login.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <form action="/login" method="post"> <input type="text" name="username" placeholder="Username"> <input type="password" name="password" placeholder="Password"> <button type="submit">Login</button> </form> </body> </html>
### 登录控制器
java// LoginController.javaimport org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
@Controllerpublic class LoginController {
@PostMapping("/login")
public String login(HttpServletRequest request) {
// 验证登录信息 String username = request.getParameter("username");
String password = request.getParameter("password");
// 登录成功,设置用户session request.getSession().setAttribute("user", username);
return "redirect:/admin/index";
}
}
### admin/index页面
html<!-- index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Admin Index</title> </head> <body> <h1>Welcome, Admin!</h1> </body> </html>
**跨域问题**
跨域问题是指不同域名之间的资源共享问题。在本文中,我们将使用拦截器来实现跨域问题。
### 跨域拦截器
java// CrossOriginInterceptor.javaimport javax.servlet. />import javax.servlet. />
public class CrossOriginInterceptor implements HandlerInterceptor {
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response) {
// 判断请求来源是否为同域名 String referer = request.getHeader("Referer");
if (!referer.equals(request.getRequestURL().toString())) {
// 不同域名,设置跨域头 response.setHeader("Access-Control-Allow-Origin", "*");
return true;
}
return false;
}
}
### 配置拦截器
java// WebConfig.javaimport org.springframework.context.annotation.Configuration;
@Configurationpublic class WebConfig implements WebMvcConfigurer {
@Override public void addInterceptors(InterceptorRegistry registry) {
// 添加跨域拦截器 registry.addInterceptor(new CrossOriginInterceptor()).addPathPatterns("/api/**");
}
}
### api接口
java// ApiController.javaimport org.springframework.web.bind.annotation.GetMapping;
@RestControllerpublic class ApiController {
@GetMapping("/api/data")
public String getData() {
return "Hello, World!";
}
}
通过以上配置,我们可以实现登录拦截和跨域问题。用户未登录时,访问某些页面或接口时,系统需要进行登录验证;不同域名之间的资源共享也可以正常工作。
**总结**
在本文中,我们使用拦截器实现了登录拦截和跨域问题。通过配置拦截器,我们可以控制用户是否登录以及不同域名之间的资源共享。这种方式可以帮助我们更好地管理Web应用程序中的安全性和资源共享。
**参考**
* [Spring MVC拦截器]( />* [跨域问题](

