花了好多天时间在做这个功能,一直没找到合适的实现。知道是用拦截器,却一直苦于不能传递上一个页面的地址。
有方法用session,但是记录在session里面,在用户登录成功后,session原来的变量已经没有了。
后来发现了一个正确的实现方式,链接:http://tianmaying.com/tutorial/spring-mvc-interceptor
我的实现方式也是参考该链接实现。只是该方法的next用Optional包装,但那是JDK8才有的,所以我用了string来存。具体代码如下:
下面是拦截器的实现
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import cn.edu.zju.eagle.crowdsourcing.web.model.User;
public class SpringLoginInterceptor implements HandlerInterceptor {
/**
* preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用,
* SpringMVC中的Interceptor拦截器是链式的,可以同时存在
* 多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行
* ,而且所有的Interceptor中的preHandle方法都会在
* Controller方法调用之前调用。SpringMVC的这种Interceptor链式结构也是可以进行中断的
* ,这种中断方式是令preHandle的返 回值为false,当preHandle的返回值为false的时候整个请求就结束了。
*/
@Override
public boolean preHandle(HttpSe