Java web写多了,会发现每次跳转页面或者网页向servlet发出请求,
网址栏会显示要访问的文件的具体位置 ,
即便是异步请求,也需要在js脚本显示要访问的文件的具体位置。
我不希望如此!
我希望能够将要访问的具体文件位置隐藏起来,用户难以从前端查看到!
事实上,很多对安全要求比较高的网站都有这样的功能需求,比如政府骨干网络,不论怎么进行页面的跳转或请求,都不会显示文件名称与位置
话不多说,贴代码
/** * 下面这个方式进行跳转页面可以掩盖具体文件的名称以及所在位置,
* 经过这个方法跳转,网址显示一直都是http://localhost:8080/cctv/gg/hh.form?num=参数
* 由参数进行判断跳到哪个网页
*/
@Controller
@RequestMapping("/gg")
public class GG {
@RequestMapping("/hh.form")
public String hh(String num, HttpServletRequest request, HttpServletResponse response) {
if (num.equals("1")) {
/**
* 跳到go.jsp
*/
System.out.println("异常检测1");
return "go";
} else if (num.equals("2")) {
/**
* 跳到love.jsp
*/
System.out.println("异常检测2");
return "love";
} else if (num.equals("3")) {
/**
* 跳到另一个名为kk的servlet
*/
System.out.println("异常检测3");
try {
request.getRequestDispatcher("/gg/kk").forward(request, response);
} catch (ServletException | IOException e) {
e.printStackTrace();
}
/**
* 请求转发后,这个return是没有用的,在这里是用来对应Java语法的,缺少了会报错,写空即可
*/
return "";
} else {
System.out.println("异常检测4");
return "go";
}
}
@RequestMapping("/kk")
public String kk(String num) {
System.out.println("kkkkkkkkkkkkkkkkkkkk");
return "go";
}
}
=======================================================================================================================================
根据上面代码,
浏览器输入网址http://localhost:8080/cctv/gg/hh.form?num=1
浏览器显示如下页面
后台打印显示的结果:
-------------------------------------------------------------------------------------------------------
接着上面,然后在
浏览器输入网址http://localhost:8080/cctv/gg/hh.form?num=2
浏览器显示如下页面
后台打印显示的结果:
------------------------------------------------------------------------------------------
接着上面,然后在
浏览器输入网址http://localhost:8080/cctv/gg/hh.form?num=3
浏览器显示如下页面
后台打印显示的结果:
-------------------------------------------
观察上面3种情况,不论以何种方式访问哪一个页面,http的路径都没有变,变的仅仅是参数num,以此来实现了隐藏要访问文件的具体位置
特别是第三种情况,是实现前端访问servlet时,隐藏了servlet的名字与位置。
======================================================================================================================================
最后,巩固一下以前的知识,得注意一下
如下图,当jsp文件在WEB-INF文件夹里面时,不能通过网址直接访问里面的jsp文件,
如http://localhost:8080/cctv/WEB-INF\statics\jsp\go.jsp,会显示404错误,
目前我知道的访问方法:通过servlet返回的路径进行访问该go.jsp文件
虽然上图有利于文件的保护,但是,保护措施并不局限于这样一种,个人感觉好鸡肋
解决办法是将jsp文件放于WEB-INF外面,如下图,虽然没有了WEB-INF的保护,但是访问方便很多
可以直接网址访问,http://localhost:8080/cctv/jsp/go.jsp,如下图,
这样的不仅可以通过servlet返回的路径进行访问该go.jsp文件,还可以直接网址访问,用于前端的页面跳转