定义拦截器:只要针对于控制器
springmvc.xml配置 路径包含admin/ 会进入 AdminController.java进行检查
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/admin/*" /><!-- 地址栏含有该内容 //配置拦截目录 -->
<bean class="com.wk.utils.AdminInterceptor"></bean><!--进入该类中进行判定是否已经登录-->
</mvc:interceptor>
</mvc:interceptors>
controller中如果没有登录 就返回登录界面 /TestSpringMVC/src/main/java/com/wk/controller/AdminController.java
package com.wk.controller;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("admin")
public class AdminController {
@RequestMapping("/test")
private void test(HttpServletResponse resp) {
// TODO Auto-generated method stub
System.out.println("admin test");
try {
resp.getWriter().append("{\"result\":true}");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/TestSpringMVC/src/main/java/com/wk/utils/AdminInterceptor.java
配置 假装登录 进行登录设置session值
package com.wk.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
public class AdminInterceptor implements HandlerInterceptor{
//实现这个接口 不需要重写他的方法 因为他的源码是用default默认方法体修饰 不用重写其他所有的 方法 要哪个取那个
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//通过request对象得到session
HttpSession session=request.getSession();
String isLogin=(String) session.getAttribute("isLogin");
if(isLogin!=null) {
return true;
}
//如果isLogin字符串为空 跳转登录页面 因为没有返回值 就用重定向
//因为是重定向 是有客户端页面向客户端页面跳转 所以要写项目名
response.sendRedirect("/TestSpringMVC/html/login.html");
return false;
}
}
网友评论