用Filter防止用户访问一些未被授权的资源,比如一个用户未登录就不允许访问网站的某些页面,并将页面重定向到需要用户登录的页面,下面是一个相关的例子:
package com.drp.util.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class AuthFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {// 1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
HttpServletRequest request = (HttpServletRequest)servletRequest;// ;//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest
HttpServletResponse response = (HttpServletResponse)servletResponse。
String currentURL = request.getRequestURI();// 取得根目录所对应的绝对路径:
String targetURL = currentURL.substring(currentURL.indexOf("/", 1), currentURL.length()); // 截取到当前文件名用于比较
HttpSession session = request.getSession(false);
if (!"/login.jsp".equals(targetURL)) {// 判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
if (session == null || session.getAttribute("user") == null) {// *用户登录以后需手动添加session
System.out.println("request.getContextPath()=" + request.getContextPath());
response.sendRedirect(request.getContextPath() + "/login.jsp");// 如果session为空表示用户没有登录就重定向到login.jsp页面
return;
}
}
// 加入filter链继续向下执行
filterChain.doFilter(request, response);// .调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
然后在配置文件web.xml里添加: (请注意,过滤是在serlvet规范2.3版中初次引入的。因此,web.xml文件必须使用DTD的2.3以上版本。)
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>com.drp.util.filter.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>*.jsp</url-pattern>// 表示对所有jsp文件有效
</filter-mapping>
这样用户没有登录的情况下就会转到登录页面。
分享到:
相关推荐
防止用户在没有登陆的情况下,访问受保护资源,在web.xml文件中添加! <filter> <filter-name>RightFilter</filter-name> <filter-class>org.com.filter.RightFilter</filter-class> </filter> <filter-...
攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是...
简单过滤器防止恶意攻击 java中的用法
filter 防止SQL注入 替换特殊不合格字符。 <!-- 防SQL注入 <filter> <filter-name>SQLFilter</filter-name> <filter-class>frame.struts.SQLFilter</filter-class> </filter> <filter-mapping> <filter-...
(使用Servlet+Filter+el等技术实现,实现了用户的部分权限,登录以后才能访问下载页面或上传页面(未实现上传或下载功能)
web 中的过滤器:当访问服务器的资源时,过滤器可以将请求拦 截下来,完成一些特殊的功能。 过滤器的作用: 用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤 2. 动态代理 2.1.概念: 在不改变一个类...
Java Filter 限制用户浏览权限,这是个很简单的例子,初学者也能看懂!
<filter-name>SingleFilter</filter-name> <filter-class>org.com.filter.SingleFilter</filter-class> </filter> <filter-mapping> <filter-name>SingleFilter</filter-name> <url-pattern>/* </filter-...
Filter控制页面的访问权限Filter控制页面的访问权限Filter控制页面的访问权限
防止sql注入的url过滤器,简单配置即可!
防止SQL注入和XSS攻击Filter
使用 ISAPI Filter 实现的限制 IIS 多线程访问程序。主要应用在下载系统,或者使用 IIS 做的流媒体点播系统中,稍加修改可以使其具有认证功能。在程序中已经对 用户认证 事件做了直接返回的处理。使用本 Filter 可以...
用户在没有登录的情况下,无法浏览除登录页面之外的其他页面,并且如果用户名为空,也不能进如其他页面。
Filter中的模糊过滤: 要实现模糊过滤,BDE中要用“*”,不允许使用“Like”关键字,且只能向后匹配,如“Fcode=’101*’”;而ADO则是使用“%”或“*”都可以,可以使用“Like”关键字,且和SQL语句用法一致,可以...
此资源与我的博客12_JavaWeb——Filter&Listener中的案例对应,在11_JavaWeb——Cookie&Session案例资源基础上加上了过滤器,实现了对未登录用户的拦截,希望有所帮助。
利用java的filter实现用户浏览权限,不同权限用户的可以浏览不同的页面。
不允许未登陆用户访问的过滤器配置,filter,用户登陆过滤器,session判断用户登陆 不允许未登陆用户访问的过滤器配置
本篇文章主要介绍了防止SpringMVC拦截器拦截js等静态资源文件的解决方法,具有一定的参考价值,有兴趣的同学可以了解一下
-- 用户访问未对其授权的资源时,所显示的连接 --> <!-- 若想更明显的测试此属性可以修改它的值,如unauthor.jsp,然后用[玄玉]登录后访问/admin/listUser.jsp就看见浏览器会显示unauthor.jsp --> /> ...