这是个过滤器的内容,

[java]
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String conString = "";
conString = req.getHeader("REFERER");//获取父url--如果不是直接输入的话就是先前的访问过来的页面,要是用户输入了,这个父url是不存在的
if("".equals(conString) || null==conString){ //判断如果上一个目录为空的话,说明是用户直接输入url访问的
String servletPath = req.getServletPath();//当前请求url,去掉几个可以直接访问的页面
if(servletPath.contains("index.jsp") || servletPath.contains("admin/login.jsp")){ //跳过index.jsp和登陆Login.jsp
chain.doFilter(request, response);
} else {
resp.sendRedirect("/ejuornal/index.jsp");//跳回首页
}
} else {
chain.doFilter(request, response);
}
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String conString = "";
conString = req.getHeader("REFERER");//获取父url--如果不是直接输入的话就是先前的访问过来的页面,要是用户输入了,这个父url是不存在的
if("".equals(conString) || null==conString){ //判断如果上一个目录为空的话,说明是用户直接输入url访问的
String servletPath = req.getServletPath();//当前请求url,去掉几个可以直接访问的页面
if(servletPath.contains("index.jsp") || servletPath.contains("admin/login.jsp")){ //跳过index.jsp和登陆Login.jsp
chain.doFilter(request, response);
} else {
resp.sendRedirect("/ejuornal/index.jsp");//跳回首页
}
} else {
chain.doFilter(request, response);
}
}下面是过滤器的配置文件

[html]
< ?xml version="1.0" encoding="UTF-8"?>
< web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>FilterPages</filter-name>
<filter-class>com.ejuornal.filter.FilterPages</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterPages</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
< /web-app>

<?xml version="1.0" encoding="UTF-8"?>
< web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>FilterPages</filter-name>
<filter-class>com.ejuornal.filter.FilterPages</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterPages</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
< /web-app>这时候再去直接输入url时就会在跳回首页。

但是有两个需要注意的问题,过滤器中的chain.doFilter(request, response);的使用------------错误如下:

[html]
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String conString = "";
conString = req.getHeader("REFERER");//获取父url
if("".equals(conString) || null==conString){
String servletPath = req.getServletPath();//当前请求url
if(servletPath.contains("index.jsp") || servletPath.contains("admin/login.jsp")){
chain.doFilter(request, response);
}else {
resp.sendRedirect("/ejuornal/index.jsp");
}
}
<SPAN style="COLOR: #ff0000">chain.doFilter(request, response);</SPAN>
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String conString = "";
conString = req.getHeader("REFERER");//获取父url
if("".equals(conString) || null==conString){
String servletPath = req.getServletPath();//当前请求url
if(servletPath.contains("index.jsp") || servletPath.contains("admin/login.jsp")){
chain.doFilter(request, response);
}else {
resp.sendRedirect("/ejuornal/index.jsp");
}
}
chain.doFilter(request, response);
}
如果这样放的话会如下图的效果:

有两个页面重合在一起,原因是:有两个chain.doFilter(request, response);的执行导致的。

也就是说咩执行一次chain.doFilter(request, response);就是一个请求的执行。

防止用户直接访问url相关推荐

  1. 微信公众号开发获取微信用户openid及访问url身份认证方式

    技术要点: 1.如何获取业务系统中用户身份标识. OPENID是微信公众号中用户的唯一标识,通过OPENID与业务系统中USRID建立一对一的对应关系,这样获取到了OPENID也就能知道所对应的USR ...

  2. linux定时任务执行url,科技常识:linux定时任务访问url实例

    今天小编跟大家讲解下有关linux定时任务访问url实例 ,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关linux定时任务访问url实例 的相关资料,希望小伙伴会喜欢也能够帮助大家. 这次 ...

  3. 易宝典文章——怎样配置TMG能够使外部用户成功访问Outlook Anywhere?

    易宝典:http://support.microsoft.com/kb/2580470/zh-cn 在企业中通常部署Exchange Server 2010服务器都是使用内部网络环境进行的.用户在企业 ...

  4. 新手必看:访问url到加载全过程详解(看完不会我吃shi)

    新手必看:访问url到加载全过程详解(看完不会我吃shi) 1.放在前面:新手必须知道的那些概念 1.1 什么是IP.域名.主机名.url.服务器 1.2 http & https 1.3 O ...

  5. Citrix NetScaler Gateway:使用Smart Access实现根据源IP控制用户可访问的交付组

    一.导语 NetScaler Smart Access是NetSacler Gateway的一个高级功能.如果用户是通过NetScaler(ADC)访问应用或桌面,该功能可以限制用户的应用或者桌面的可 ...

  6. Python——通过用户cookies访问微博首页

    通过用户cookies访问微博首页 1.登录微博 self.driver.delete_all_cookies() # 删除cookies self.driver.get(self.url)time. ...

  7. 如何判断用户是否访问过某个网址

    如何判断用户是否访问过某个网址 我们经常有这样的需求:想知道用户之前有没有访问过某个网址.有没有什么方法或技术能实现这一点呢? 初步探索 注意到,在大部分浏览器默认设置里,用户访问过的链接和没访问过的 ...

  8. 如果20万用户同时访问一个热点缓存,如何优化你的缓存架构?

    点击上方"蓝字", 右上角选择"设为星标" 周一至周五上午11点45!精品技术文章准时送上! 本文转载自公众号:石杉的架构笔记 目录 (1)为什么要用缓存集群 ...

  9. 基于HttpClient的HttpUtils(后台访问URL)

    最近做在线支付时遇到需要以后台方式访问URL并获取其返回的数据的问题,在网络上g了一把,发现在常用的还是Apache的HttpClient.因为以经常要用到的原故,因此我对其进行了一些简单的封装,在此 ...

  10. vsftpd类似wu-ftpd分类(Class)的配置-给不同网段的人以不同的上传权限-对虚拟用户进行访问IP限制...

    主要是用于实现:"给不同网段的人以不同的上传权限"和"对虚拟用户进行访问IP限制"这两个功能.实现方法就是利用tcp_warppers的setenv LOAD_ ...

最新文章

  1. 精度 召回率 F score
  2. CQRS, Task Based UIs, Event Sourcing agh!
  3. jq中ajax返回数据的json_encode,jQuery AJAX使用JSON返回对PHP脚本的调用
  4. php存储session更改,php如何修改SESSION的生存存储时间的实例代码_php实例
  5. 2021河南高考成绩查询郸城一高,郸城一高在河南有多牛 2021年高考成绩
  6. 用URLGather来管理和保存你的页面
  7. 为了梦想开始历练之清除浮动篇
  8. java druid sqlite_springboot整合druid抛出dbType not support : sqlite异常
  9. vb.net怎么调用fastreport报表_财务分析-企业财务管理报表模板制作实现智能化的财务运营...
  10. css3宽度变大动画_动画演示流量计的工作原理
  11. Spring Boot 学习(一) 快速搭建SpringBoot 项目
  12. 联名款Redmi K40游戏增强版今日揭晓:神秘女主粉色头发吸睛
  13. RHEL 5 rpm包安装bind
  14. (一)1-4Python运算符
  15. C/C++[codeup 1397,2020]查找
  16. 数字图像处理技术在智能交通中的应用
  17. Chrome浏览器保存整个网页为图片的方法
  18. 前端学习之路Electron——全局注册、注销快捷键
  19. 数据库——如何求出候选码
  20. 基于视词袋模型的场景识别

热门文章

  1. 用标准C编写COM dll
  2. [SCM]源码管理 - perforce的trigger和daemon
  3. Jmail组件在C#中发送邮件代码:
  4. asp.net控件开发基础二
  5. 百度地震了,也许早晚的事
  6. java url链接超时_Java HttpURLConnection超时和IO异常处理
  7. iOS----------APP怎样做更安全
  8. Scala 编程---类和对象
  9. 一个 结构体保存和窗口位置大小记录的类
  10. Mini 容器学习笔记10——方法注入