服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java中应用filter对权限和session控制

用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>

这样用户没有登录的情况下就会转到登录页面。

扫描关注微信公众号