SpringMVC框架的使用实现使用拦截器强制未登录用户进行登录和登录用户可进行文件的上传和下载的完整代码
时间: 2024-05-16 15:13:08 浏览: 104
springmvc拦截器登录验证示例
这是一个简单的 SpringMVC 框架的示例代码,用于演示如何使用拦截器实现登录和文件上传/下载功能。以下是完整代码:
InterceptorConfig.java
```
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login", "/doLogin");
}
}
```
LoginInterceptor.java
```
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
if (user == null) {
response.sendRedirect("/login");
return false;
}
return true;
}
}
```
FileController.java
```
@Controller
public class FileController {
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
// 处理文件上传逻辑
// ...
redirectAttributes.addFlashAttribute("message", "文件上传成功");
return "redirect:/";
}
@RequestMapping(value = "/download")
public void handleFileDownload(HttpServletResponse response) {
// 处理文件下载逻辑
// ...
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"example.txt\"");
// 将文件写入到 response 输出流中
// ...
}
}
```
LoginController.java
```
@Controller
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String showLoginPage() {
return "login";
}
@RequestMapping(value = "/doLogin", method = RequestMethod.POST)
public String doLogin(@RequestParam("username") String username,
@RequestParam("password") String password,
HttpSession session) {
// 处理登录逻辑
// ...
session.setAttribute("user", username);
return "redirect:/";
}
}
```
在上面的代码中,我们首先创建了一个名为 InterceptorConfig 的类,并实现了 WebMvcConfigurer 接口。在该类中,我们注入了一个名为 LoginInterceptor 的拦截器,并在 addInterceptors() 方法中将其添加到所有请求路径上面。
然后,我们创建了一个名为 LoginInterceptor 的拦截器类,实现了 HandlerInterceptor 接口,并在 preHandle() 方法中判断用户是否登录。如果用户未登录,则重定向到登录界面;否则,继续执行后续逻辑。
接下来,我们创建了一个名为 FileController 的控制器类,并在其中定义了一个名为 handleFileUpload() 的方法,用于处理文件上传请求。同时,我们还定义了一个名为 handleFileDownload() 的方法,用于处理文件下载请求。在这两个方法中,我们分别处理了文件上传和下载的逻辑,并设置了响应头,使得浏览器可以顺利地下载文件。
最后,我们创建了一个名为 LoginController 的控制器类,并在其中定义了一个名为 doLogin() 的方法,用于处理登录请求。在该方法中,我们首先处理了登录的逻辑,并将用户名存储到 HttpSession 中。然后,我们将请求重定向到首页。
注意,我们还在 LoginController 类中定义了一个名为 showLoginPage() 的方法,用于显示登录界面。这里省略了该方法的代码。
阅读全文