权限过滤器,防止未登录直接进入页面

1:创建Filter:  LoginFilter.java

package com.syp.filter;

import java.io.IOException;
import java.util.ArrayList;

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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet Filter implementation class LoginFilter
 */
@WebFilter("/LoginFilter")
public class LoginFilter implements Filter {
	public static final String login_page = "/mycms/index.jsp";
	public static final String logout_page = "/mycms/index.jsp";
	
	//不被拦截的页面
	private static ArrayList<String> initPages = new ArrayList<>();
	static {
		initPages.add("/index.jsp");
		initPages.add("/register.jsp");
	}

	/**
	 * Default constructor.
	 */
	public LoginFilter() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;
		String currentURL = request.getRequestURI();
		String ctxPath = request.getContextPath();
		// 除掉项目名称时访问页面当前路径
		String targetURL = currentURL.substring(ctxPath.length());
		HttpSession session = request.getSession(false);
                //判断是否为 不被拦截的界面
		Boolean isInitPage = false;
		for (int i = 0; i < initPages.size();i++) {
			String initPage = initPages.get(i);
			System.out.print("\ninitPage:  " + initPage);
			if (initPage.equals(targetURL)) {
				isInitPage = true;
			}
		}

		if (!isInitPage) {
			System.out.println(
					"\ntargetURL:   " + targetURL + "\nctxPath:   " + ctxPath + "\ncurrentURL:   " + currentURL);
			// 在不为登陆页面时,再进行判断,如果不是登陆页面也没有session则跳转到登录页面,
			if (session == null || session.getAttribute("user") == null) {
				response.sendRedirect("/mycms/index.jsp");
				return;
			} else {
				// 这里表示正确,会去寻找下一个链,如果不存在,则进行正常的页面跳转
				chain.doFilter(request, response);
				return;
			}
		} else {
			chain.doFilter(request, response);
			return;
		}


	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

2: 配置WEB.XML  (只拦截JSP页面)

<?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"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0" >

<filter>
	<filter-name>LoginFilter</filter-name>
	<filter-class>com.syp.filter.LoginFilter</filter-class>
</filter>

<filter-mapping>
	<filter-name>LoginFilter</filter-name>

	<url-pattern>*.jsp</url-pattern>
</filter-mapping>

</web-app>	



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值