public class AuthFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest
HttpServletResponse response = (HttpServletResponse)servletResponse
String currentURL = request.getRequestURI()
String targetURL = currentURL.substring(currentURL.indexOf("/", 1),
currentURL.length())//截取到当前文件名用于比较
HttpSession session = request.getSession(false)
if (!"/a.jsp".equals(targetURL)) {
if (session == null || session.getAttribute("user") == null) {
//*用户登录以旁弯后需手动添加session
System.out.println("request.getContextPath()=" + request.getContextPath())
response.sendRedirect(request.getContextPath() + "/a.jsp")
//如果session为空表示用户没有登录就重定向到login.jsp页面
return
}
}
filterChain.doFilter(request, response)
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
大闭中体上差不多是这运态闷么写的,然后在web.xml中做配置让Filter运行起来,并且规定对那些页面做登陆的控制,具体配置和Servlet差不多,看看例子就晓得了
request.getParameter("method") 行吗jsp中我没见过判脊迅断重定向,也没在需求中看到过。
如果逗消要写,可以再目的页面的顶部山野知加上js代码 location.href 判断下吧
在你登陆时一定要将用户信息( 例如user),或者一个变凳亏量存储到session中然后你在web.xml中加入过滤器
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>处理过滤的类,例如AuthFilter</filter-class>
<init-param>
<param-name>noAuthList</param-name>
<param-value>不许要过滤的页面</param-value>
</init-param>
</filter>
处理过滤的类
public class AuthFilter implements Filter
{
/**
* filter 配置.
*/
private FilterConfig filterConfig
/**
* 不验证登录
*/
private String[] noFilteList
/**
* 不验证权限.
*/
private String[] noAuthList
/**
* 日志类.
*/
private Logger logger = Logger.getLogger(AuthFilter.class)
public void destroy()
{
}
/**
* 1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括
* 表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通枣指神常在简单的过
* 滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
*/
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest) servletRequest
/**
* 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中
* 无法得到的方法,就要把此request对象构造成HttpServletRequest
*/
HttpServletResponse response = (HttpServletResponse) servletResponse
String currentURL = request.getRequestURI()// 取得根目录所对应的绝对路径:
String targetURL = currentURL.substring(currentURL.lastIndexOf("/")+1)// 截取到当逗罩前文件名用于比较
HttpSession session = request.getSession(false)
if (equalsUrl(targetURL,noFilteList))
{
// 判断当前页是否是重定向以后的登录页面,如果是就不做session的判断,防止出现死循环
if (session == null || session.getAttribute("user") == null)
{
// *用户登录以后需手动添加session
logger.info("被隔离:" + targetURL)
response.sendRedirect(request.getContextPath() + "/a.jsp")
// 如果session为空表示用户没有登录就重定向到login.jsp页面
return
}
}
// 加入filter链继续向下执行
/**
* 调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作 为它
* 的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另
* 一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
*/
filterChain.doFilter(request, response)
}
/**
* filter初始化.
*/
public void init(FilterConfig filterConfig) throws ServletException
{
this.filterConfig = filterConfig
// 以下从配置文件获取配置信
String nofilterPages = filterConfig.getInitParameter("noFilteList")
String noAuthPages =filterConfig.getInitParameter("noAuthList")
logger.info("不需要过滤登录页面为:" + nofilterPages)
logger.info("不需要过滤权限为:"+noAuthPages)
noFilteList = nofilterPages.split("")
noAuthList = noAuthPages.split("")
}
/**
* 比较URL 是否在需要验证的范围内.
*
* @param url
*URL
* @param nofilterList 不过滤菜单.
* @return 是否需要验证 需要验证 true 不需要验证 false
*/
private Boolean equalsUrl(String url ,String[] nofilterList)
{
if(url.length() == 0){
return false
}
String suffName=url.substring(url.lastIndexOf(".")+1)
//不过滤png.jpg
if(suffName.equalsIgnoreCase("png")||suffName.equalsIgnoreCase("jpg")||suffName.equalsIgnoreCase("gif")){
return false
}
if(url.equalsIgnoreCase("jquery-1.4.1.js")||url.equalsIgnoreCase("popup_layer.js")||url.equalsIgnoreCase("jquery.json-2.2.min.js"))
{
return false
}
// logger.info("过滤页面:" + url)
// 判断是否在
for (String nofilterPage : nofilterList)
{
if (nofilterPage.equals(url))
{
return false
}
}
return true
}
这样,如果不登陆,在任何浏览器都无法打开除了a.jsp以外的页面,
我回答的已经很明白了,希望给分
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)