web开发之登录拦截器

我们在进行web开发的时候,通常会限制用户的合法性,即登陆拦截和验证,只是为了保障系统的安全,只将我们规定的个别请求可直接访问,其余的必须经过拦截器来进行验证,那么拦截器到底该怎么写呢?下面就将Spring MVC和JFinal中的登录拦截器的写法记录一下,我们一起进步

Spring MVC中的登录拦截

1.编写登录拦截类

/**
 * @ClassName: LoginFilter
 * @author Liu_xg
 * @date 2018年5月3日
 * @Description: TODO 登陆拦截及验证
 */
public class LoginFilter implements Filter {
    private String[] paths;

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        //设置字符集为utf-8
        request.setCharacterEncoding("UTF-8");
        String path=request.getServletPath();
        for (String p : paths) {
            if (path.equals(p)) {
                chain.doFilter(request, response);
                return;
            }
        }
        HttpSession session=request.getSession();
        try {
            String username=(String) session.getAttribute("username");
            if(username==null){
                //判断session是否为空,为空的话就页面重定向到登陆界面
                response.sendRedirect(request.getContextPath()+"/text/index");
                return;
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            //判断session是否为空,为空的话就页面重定向到登陆界面
            response.sendRedirect(request.getContextPath()+"/text/index");
            e.printStackTrace();
            return;
        }
        chain.doFilter(request, response);
        

    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        // 将配置的放行url取出来
        paths = config.getInitParameter("excPath").split(",");
    }

}

2.在web.xml中配置不需要拦截的请求


    filter
    com.ftwj.interceptor.LoginFilter
    
        excPath
        /text/index,/text/login,/text/register,/check/loginname,
        /check/password,/check/pswContain,/user/register
    
  
  
    filter
    /*
  

其中标签中就是不需要拦截的请求

JFinal中的登录拦截

1.编写登录拦截类

/**  
* @ClassName: LoginInterceptor  
* @author Liu_xg  
* @date 2018年5月10日  
* @Description: TODO  登陆拦截器
*/
public class LoginInterceptor implements Interceptor {

    @Override
    public void intercept(Invocation inv) {
        try {
            //取到session
            HttpSession session=inv.getController().getSession();
            if(session==null){
                inv.getController().redirect("/toLogin");
            }else{
                if(session.getAttribute("user")!=null){
                    User user=(User) session.getAttribute("user");
                    if(user!=null){
                        inv.invoke(); 
                    }else{
                        inv.getController().redirect("/toLogin");
                    }
                }else{
                    inv.getController().redirect("/toLogin");
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            inv.getController().redirect("/toLogin");
        }
    }
}

2.将拦截器注册到框架中

   /**
     * 配置路由
     * 
     * @param me
     */
    @Override
    public void configRoute(Routes me) {

        // 配置拦截器
        me.addInterceptor(new LoginInterceptor());

        me.add("/", LoginController.class, "/WEB-INF/views/login");
        me.add("/main", MainController.class, "/WEB-INF/views/main");
        me.add("/menu", MenuController.class, "/WEB-INF/views/menu");
        me.add("/user", UserController.class, "/WEB-INF/views/user");
        me.add("/role", RoleController.class, "/WEB-INF/views/role");

    }

3.设置不需要拦截的请求

1).这种方式是将整个controller都不拦截

/**
 * @ClassName: LoginController
 * @author Liu_xg
 * @date 2018年5月4日
 * @Description: TODO 登陆控制器
 */

@Clear(LoginInterceptor.class)
public class LoginController extends Controller {
      ******
}

2).这种方式是不拦截此方法

   /**
     * 登陆,判断账号和密码是否正确
     */
    @Clear(LoginInterceptor.class)
    public void login() {
      *********
    }

你可能感兴趣的:(web开发之登录拦截器)