javaweb中
- 实现接口Filter
- 重写三个方法
* 处理乱码问题
web.xml中配置文件
<!-- 配置过滤器-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<!-- 数据进出都统一编码为:utf-8-->
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<!--拦截所有请求-->
<url-pattern>/*</url-pattern>
</filter-mapping>
登录案例
//强制转换
HttpServletRequest request=(HttpServletRequest) req;
//获取资源的请求路径
String uri = request.getRequestURI();
//判断时候包含登录相关的资源路径
//登录验证要将css/js/图片等资源排除在外
if (uri.contains("/login.jsp") || uri.contains("/login") ||uri.contains("/web/css/")|| uri.contains("/web/js/")||uri.contains("/checkCode")){
//如果包含登录界面就放行
chain.doFilter(req,res);
//如果不加上这一句程序到此处就不会往下走了
}else {
//不包含需要验证用户是否登录
// 思考为什么保存到session域中 如果不保存到session域中那么我在请求重定向的时候就拿不到数据了
Object user = request.getSession().getAttribute("admin");
if (user!=null){
//浏览器中存在用户的话就可以直接浏览需要的东西
chain.doFilter(req,res);
}else {
//检测到没有登录的话
//转发到登录界面
request.setAttribute("login_msg","您尚未登录,请先登录");
request.getRequestDispatcher("/login.jsp").forward(request,res);
}
}
SpringMVC模式下的拦截器
@RequestMapping("/okk")
public String testInterceptor(){
System.out.println("拦截器执行了");
return "Ok";
}
xml中配置文件
<!-- 配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="controller.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
增加拦截器
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session=request.getSession();
//放行的情况 : 1 想要跳转到登录界面
// : 2 正在跳转界面
// : 3 session不为空
if (session.getAttribute("user")!=null){
return true;
}
if(request.getRequestURI().contains("realLogin")){
return true;
}
if (request.getRequestURI().contains("login")){
return true;
}
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
return false;
}
增加注销功能
@RequestMapping("/goOut")
public String goOut(HttpSession session ){
session.removeAttribute("user");
return "maininterface";
}