java登录拦截Filter

摘要:
此例子为一个简单的登录拦截。--配置参数比如不拦截的路径--˃excludes/register.html,/resource/**/*,/note/**/*其次就是拦截类的编写。

此例子为一个简单的登录拦截。

首先在web.xml中配置拦截类。

<filter-mapping>
        <filter-name>SessionFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
<filter>
    <filter-name>SessionFilter</filter-name>
    <!--拦截类 -->
    <filter-class>com.skin.generate.user.UserLoginFilter</filter-class>
    <init-param>
        <param-name>loginUrl</param-name>
        <param-value>/finder/login.html</param-value>
    </init-param>
    <!--配置参数 比如不拦截的路径 -->
    <init-param>
        <param-name>excludes</param-name>
        <param-value>
            /register.html,
            /resource/**/*,
            /note/**/*
        </param-value>
    </init-param>
</filter> 

其次就是拦截类的编写。

packagecom.skin.generate.user;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.Cookie;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importcom.skin.finder.security.UserSession;
importcom.skin.finder.web.util.Client;
importcom.skin.finder.web.util.CookieUtil;
importcom.skin.generate.entity.User;
public class UserLoginFilter implementsFilter {
/*
     * String nofilter; String nofilterFiles[]; String sendRedirect;
     */
    public voiddestroy() {
    }
    public voiddoFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throwsIOException, ServletException {
        HttpServletRequest request =(HttpServletRequest) req;
        HttpServletResponse response =(HttpServletResponse) res;
        String path =request.getServletPath();
        String url =request.getRequestURI();
        //如果不需要过滤的静态文件,直接放行
        if (path.endsWith(".css") || path.endsWith(".js")
                || path.endsWith("Login.html") 
                || url.indexOf("resource") > 0 || url.indexOf("note") > 0
                || url.endsWith("login.jsp") || path.endsWith(".gif")
                || path.endsWith(".ico")) {
            chain.doFilter(request, response);
            return;
        } else{
            if(checkUser(request, response)) {
                chain.doFilter(request, response);//如果用户已经登录,就放行
                return;
            } else{
                //没有登录,重定向到登录页面
                String contextPath =getContextPath(request);
                response.sendRedirect(contextPath+ "/template/finder/login.jsp");
                return;
            }
        }
    }
    protectedString getContextPath(HttpServletRequest request) {
        String contextPath =request.getContextPath();
        if ((contextPath == null) || (contextPath.equals("/"))) {
            return "";
        }
        returncontextPath;
    }
    private booleanisInArray(String path, String nofilterFiles[]) {
        for (int i = 0; i < nofilterFiles.length; i++) {
            String nofilterFile =nofilterFiles[i];
            if(nofilterFile.equals(path)) {
                return true;
            }
        }
        return false;
    }
    private booleancheckUser(HttpServletRequest request,
            HttpServletResponse response) throwsIOException {
        //1.判断cookie 是否存在
        Cookie cookie =CookieUtil.getCookie(request, Client.COOKIE_NAME);
        if(cookie ==null){
            return false;
        }
        //2.校验session
        HttpSession session = request.getSession(false);//如果不存在返回空
        if (session == null) {
            return false;
        }
        //3.校验登录用户
        Object obj =session.getAttribute(SessionUtils.USER_NAME);
        if (obj == null) {
            return false;
        }
        return true;
    }
    public void init(FilterConfig config) throwsServletException {
        /*
         * nofilter = config.getInitParameter("excludes"); 
         * nofilterFiles =nofilter.split(","); sendRedirect =
         * config.getInitParameter("loginUrl");
         */
        //System.out.println(Arrays.asList(nofilterFiles));
}
}

免责声明:文章转载自《java登录拦截Filter》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转)SVN详解【UE】常用的UltraEdit使用技巧下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringBoot(十七):SpringBoot2.1.1数据类型转化器Converter

什么场景下需要使用类型化器Converter? springboot2.1.1在做Restful Api开发过程中往往希望接口直接接收date类型参数,但是默认不加设置是不支持的,会抛出异常:系统是希望接收date类型,string无法转化为date错误。 { "timestamp": "2019-10-29 11:52:05", "statu...

java HttpURLConnection 接口文件传输文件上传

1 public String uploadImg(MultipartFile imgFile, String uploadUrl) throws Exception { 2 3 URL url = new URL(uploadUrl); 4 HttpURLConnection conn = (HttpURL...

java发起post请求—— body有参/无参

import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpRespon...

angular写的一个导航栏

ts import { Component } from '@angular/core'; // 定义一个interface interface Menu{ title:string,link:string,id:string } @Component({ selector: 'app-root', templateUrl: './app.co...

Neo4J图库的基础介绍(二)-图库开发应用

我们接着Neo4J图库的基础介绍(一)继续介绍Neo4J图库。 JAX-RS是一个用于构建REST资源的Java API,可以使用JAX-RS注解装饰每一个扩展类,从而让服务器处理对应的http请求,附加注解可以用来控制请求和响应的格式,http头和URI模板的格式。 下面看一个服务器扩展实现的示例,允许客户端请求社交网络的两个成员之间的距离 @Pa...

JAVA8的java.util.function包 @FunctionalInterface

1函数式接口java.util.functionhttps://www.cnblogs.com/CobwebSong/p/9593313.html2JAVA8的java.util.function包https://www.cnblogs.com/linzhanfly/p/9686941.html 3 Java HashMap computeIfAbse...