防止用户直接访问url的权限控制(使用过滤器)
2013-08-18 15:46
776 查看
这是个过滤器的内容,
[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);就是一个请求的执行。
[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直接访问资源。
- 用户的访问权限过滤器,防止用户直接输入URL直接访问资源。
- 防止用户直接访问url的权限控制
- 防止用户直接访问url的权限控制
- 用户的访问权限过滤器,防止用户直接输入URL直接访问资源。
- JAVAWEB开发之Servlet Filter(过滤器)详解包括post和get编码过滤器、URL访问权限控制、自动登录。以及装饰模式的使用
- java 使用过滤器控制用户访问权限
- HttpServletRequest的getServletPath、getServletURI、getServletURL等区别 &&如何防止用户通过直接输入URL访问网页
- 开始VS 2012中LightSwitch系列的第5部分:我可以使用用户权限来控制访问权吗?
- 使用Filter控制url访问权限
- 大唐任务管理系统--用过滤器控制用户访问权限
- 防止其他URL地址直接访问本站资源【防盗链过滤器】
- 防止用户直接访问url
- Linux下使用ACL命令实现控制用户的目录访问权限
- java项目中普遍存在的一个bug,用户直接可以通过url访问本人没有权限的页面
- 通过request.getHeader("referer")防止用户手动修改URL访问非权限页面
- 防止未登录的用户直接重写URL访问系统
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
- servlet+jsp实现过滤器,防止用户未登录访问
- SQL Server 2005 控制用户权限访问表