在Spring MVC框架中,拦截器(Interceptor)是一种用于处理请求和响应之间通用逻辑的机制,例如权限检查、日志记录等。本示例主要展示了如何创建一个登录验证拦截器,确保只有登录过的用户才能访问特定的页面。
我们需要创建一个自定义的拦截器类,该类通常会实现Spring MVC提供的`HandlerInterceptor`接口或继承`HandlerInterceptorAdapter`抽象类。在这个示例中,我们可以定义一个名为`LoginInterceptor`的类,如下:
```java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 检查用户是否已登录,如未登录则重定向到登录页面
String loginPage = "/loginpage.html";
if (!isUserLoggedIn(request)) {
response.sendRedirect(loginPage);
return false;
}
return true;
}
private boolean isUserLoggedIn(HttpServletRequest request) {
// 实现检查用户是否已登录的方法,例如通过session获取用户信息
// 如果session中有用户信息,则表示已登录
Object user = request.getSession().getAttribute("user");
return user != null;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}
```
接下来,我们需要配置Spring MVC,将这个拦截器添加到拦截器链中。这通常在`WebConfig`或者`DispatcherServlet`的配置类中完成,通过`addInterceptors`方法添加拦截器:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/user/home.html") // 添加需要拦截的URL模式
.excludePathPatterns("/loginpage.html", "/exception.html"); // 排除不需要拦截的URL
}
}
```
在示例中的`index.jsp`文件是一个简单的HTML页面,它提供了几个链接,包括登录链接和需要登录才能访问的用户中心链接。当用户点击用户中心链接时,如果没有登录,将会被拦截并重定向到登录页面。
`Controller`类中的代码展示了如何使用`@RequestMapping`、`@RequestParam`和`@SessionAttributes`注解,这些是Spring MVC用于处理HTTP请求的核心注解。但它们不是直接与拦截器相关的,`@SessionAttributes`可以用来在多个方法间共享数据,例如存储用户的登录信息。
总结来说,这个示例演示了如何利用Spring MVC的拦截器机制来实现登录验证。通过创建自定义拦截器类并配置拦截器链,我们可以在用户访问特定资源之前进行权限检查,确保只有已登录的用户才能访问受保护的页面。