springMVC实现不经DispatcherServlet,过滤html

   前提:新的微信端项目。要求是访问的时候需要用户登录。登录需要跳转到微信Auth2.0去获取用户信息。

  一般登录拦截的操作都是在applicationContext.xml配置一个拦截器。如下面这样

    <mvc:interceptors>
        <bean class="com.common.interceptor.AllInterceptor" />
    </mvc:interceptors>

  在这个拦截器中要求用户登录(存在session中)。

if(session.getAttribute("loginproperties") == null){
         response.sendRedirect(StringUtil.authUrl(request.getScheme()+"://"+request.getServerName()+request.getRequestURI()));
            return false;
        }

但是现在有个问题是,我们的拦截都是进了DispatcherServlet,如果需要在html这种静态资源之前增加权限拦截,那么有个很蛋疼的事情就是,因为springMVC会根据你的链接去动态匹配对应的handler,如果你需要跳转到不同的静态页面,那么你每写一个静态页面,就需要增加一个跳转,
return "/test/a" ;

这样既繁琐,又增加了服务器的压力。那有没有方法可以不进入dispatchServlet,但是可以对静态页面进行拦截,当没有权限访问的时候,要求用户登录呢?

答案是有的。

就是过滤器。

package com.common.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.filter.OncePerRequestFilter;
import com.common.util.StringUtil;

/**
 * Servlet Filter implementation class LoginFilter
 */
public class LoginFilter extends OncePerRequestFilter {

    /**
     * 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 doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // place your code here

        // pass the request along the filter chain
        System.out.println("come hiere");
        HttpSession session = request.getSession();
if(null==session.getAttribute("openid")&&(null==request.getParameter("code")||"".equals(request.getParameter("code").trim())))
        { response.sendRedirect(StringUtil.authUrl(request.getScheme()+"://"+request.getServerName()+request.getRequestURI()));
            return;
        }
        chain.doFilter(request, response);
    }
}
然后在web.xml中配置

 <filter>
  <filter-name>LoginFilter</filter-name>
  <filter-class>com.common.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>*.html</url-pattern>
  </filter-mapping>

就可以在访问每一个html文件之前,要求用户先登录,且无需进入到dispathServlet中折腾了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值