1、创建一个普通的web工程。
2、先创建需要的基础文件,比如一个用户类。
package com.example.mode; public class User { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
再创建一个监听类,这个类继承自HandlerInterceptor,然后,在这个类里就可以处理一些监听到的信息,比如有的登陆,有的没有登陆。
package com.example.interceptor; import com.example.mode.User; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //这里编写拦截规则,可以从session中获取用户信息,这个名为user的attribute对象如果为空,就返回error,因为没有登陆 // 如果这个对象存在,就返回true,不做任何处理。 User user= (User) request.getSession().getAttribute("user"); if(user==null) { response.sendRedirect(request.getContextPath()+"/user/error"); return false; } return true; } @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 { } }
这里还要建一个监听配置类,这个配置类来决定监听的对象集合,监听的类型,这里主要是监听web网页,所以,还要实现一个
WebMvcConfigurer接口,然后重写这个接口里的addInterceptor程序,把上面的MyInterceptor监听类,添加到web网页监听中去。
package com.example.config; import com.example.interceptor.MyInterceptor; 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 MyInterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { //要拦截的路径集合 String[] addPathPatterns={"/user/**"}; //要排除的路径集合 String[] excludePathPatterns={"/user/out","/user/error","/user/login"}; //将规则集合添加到注册中 registry.addInterceptor(new MyInterceptor()) .addPathPatterns(addPathPatterns) .excludePathPatterns(excludePathPatterns); } }
这些工作都做完了,现在可以去编写控制类了,
package com.example.control; import com.example.mode.User; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; //这个注释是表明这个类是一个Controller,还有就是以下所有方法都带ResponseBody @RestController //这里是为了方便,以后所有的指向都会默认指向/user/后面的路径了 @RequestMapping("/user") public class MyController { // 以下为登陆方法,在里面可以检查登陆信息,然后填充request对象,再定向到需要的页面。 @RequestMapping("/login") public Object login(HttpServletRequest request){ User user=new User(); user.setId(1001); user.setName("翠花"); request.getSession().setAttribute("user",user); return "登陆成功"; } // 登陆成功以后,定位到用户中心页面 @RequestMapping("/center") public Object center(HttpServletRequest request){ User user=(User) request.getSession().getAttribute("user"); return "欢迎编号为:"+user.getId()+" 用户:"+user.getName(); } // 没有登陆的用户访问的内容 @RequestMapping("/out") public Object out(){ return "普通用户访问页面"; } // 当非登陆用户访问到某些页面时会定向到出错页面。 @RequestMapping("/error") public Object error(){ return "请登陆后再访问,谢谢!"; } }
然后就可以直接运行了。