springmvc拦截器拦截失败
拦截未登录的用户。
项目结构:
web.xml
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<!-- url-pattern配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
拦截器配置:
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/bank/**" />
<bean class="com.ayyll.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
拦截器编写:
public class LoginInterceptor implements HandlerInterceptor {
//Handler执行完成之前调用这个方法
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//获取Session
HttpSession session = request.getSession();
String username = (String)session.getAttribute("username");
//System.out.println(username == null);
if(username == null){
System.out.println("尚未登陆");
response.sendRedirect("/index.jsp");
return false;
}
return true;
}
//Handler执行之后,ModelAndView返回之前调用这个方法
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
//Handler执行完成之后调用这个方法
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
controller:
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public @ResponseBody
Map<String, Object> login(HttpServletRequest request) throws IOException {
UserDao udao = new UserDaoImpl();
User user = new User();
String username = request.getParameter("username");
user.setUsername(username);
user.setPassword(request.getParameter("password"));
List<User> ans = udao.queryUser(user);
Map<String, Object> map = new HashMap<String, Object>();
HttpSession session = request.getSession();
// 密码正确
if (ans.size() > 0) {
map.put("msg", "yes");
session.setAttribute("username",username);
} else {
map.put("msg", "no");
}
return map;
}
后台能够输出 尚未登陆这句话,但是response.sendRedirect("/index.jsp");好像没执行,反正就拦截了没效果,能进去bank下的页面,但是里面的ajax请求确拦截了。。这 到底是怎么回事
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
1.没有跳转登录页面,应该是你打开 index.jsp 路径的问题。相对路径是不是读不到
response.sendRedirect(request.getContextPath()+"/index.jsp")
2、还能打开bank下面的页面是因为拦截器中判断条件的不完整
希望能够帮到你~~~