/**
* Servlet Filter implementation class LoginFileter
*/
public class LoginFileter implements Filter {
private List<String> uriLists = new ArrayList<>();
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("过滤器启动");
String noUri = fConfig.getInitParameter("noUri"); //从web.xml读取配置
String[] uriArrays = noUri.split(";");
for(String uri: uriArrays){
uriLists.add(uri);
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("过滤器执行");
HttpServletRequest servletrequest = (HttpServletRequest) request;
HttpServletResponse ServletResponse = (HttpServletResponse) response;
HttpSession session = servletrequest.getSession();
String uri = servletrequest.getRequestURI(); //获取地址
System.out.println(uri);
//不需要登录验证处理
if(passLoginValidate(uri) == true){
chain.doFilter(request, response); //直接放行
return;
}
String user = (String) session.getAttribute("username"); // 获取用户名密码
if (user == null || user.equals("")) { // 如果没有登录就跳转到登录界面
System.out.println("未登录账号");
ServletResponse.sendRedirect("/IntegralManager_v1.0/jsp/login.jsp");
} else {
System.out.println("登录");
chain.doFilter(request, response);
}
}
public void destroy() {
System.out.println("过滤器销毁");
}
/**
* 请求uri是否需要登录验证
* @return false:需要验证 true:不需要验证
*/
public boolean passLoginValidate(String uri) {
boolean isPass = false;
int index = uri.indexOf("?");
if (index != -1) {
uri = uri.substring(0, index);
}
for (String u : uriLists) {
if (uri.endsWith(u)) {//不需要登录验证的网页
isPass = true;
break;
}
}
return isPass;
}
}
XML配置文件
<filter>
<filter-name>AuthenFilter</filter-name>
<filter-class>com.hst.integraimanager.filter.LoginFileter</filter-class>
<init-param>
<param-name>noUri</param-name>
<param-value>login.jsp;registered.jsp;jpg;gif;css;js;servlet;do</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>