实现登录拦截器:#
- 用户未登录时访问/logout或/center会被拦截
- 用户已登录时访问/logout或/center不会被拦截
- 用户登录后访问过/logout后再次访问/center会被拦截
- 被拦截后,将会被redirect至/error页面
1. UserController#
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private User user;
@RequestMapping("/login/{username}/{password}")
public String login(
@PathVariable("username") String username,
@PathVariable("password") String password,
HttpServletRequest request){
user.setName(username);
request.getSession().setAttribute("user",user);
return user.getName()+" login success";
}
@RequestMapping("/logout")
public String logout(HttpServletRequest request){
User logoutUser = (User) request.getSession().getAttribute("user");
request.getSession().removeAttribute("user");
return logoutUser.getName()+" logout success";
}
@RequestMapping("/center")
public String center(HttpServletRequest request){
User centerUser = (User) request.getSession().getAttribute("user");
return "User center: "+centerUser.getName();
}
@RequestMapping("/error")
public String error(){
return "error, you haven't login";
}
}
2. 实现拦截器UserInterceptor#
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
User user = (User) request.getSession().getAttribute("user");
if (user == null) {
response.sendRedirect("/user/error");
return false;
}
return true;
}
}
3. @Configuration
配置拦截器#
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry registry) {
String[] addpath = {
"/user/**"
};
String[] excludePath={
"/user/login/**",
"/user/error",
};
registry.addInterceptor(new UserInterceptor()).addPathPatterns(addpath).excludePathPatterns(excludePath);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?