当前位置:实例文章 » 其他实例» [文章]拦截器实现登录拦截和跨域问题

拦截器实现登录拦截和跨域问题

发布人: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拦截器]( />* [跨域问题](

其他信息

其他资源

Top