Spring 过滤器、分发器结合实现 只对某种类型数据 在 Ajax调用时候 进行过滤

来源:互联网 发布:在端口1433连接失败 编辑:程序博客网 时间:2024/06/14 20:54


在Spring开发过程中,我们经常需要对 页面调用的数据进行过滤,如果用户未登入,则返回空,如果登入 则,后台返回数据。

    <filter>        <display-name>AjaxCheckSession</display-name>        <filter-name>AjaxCheckSession</filter-name>        <filter-class>com.phicomm.security.AjaxCheckSession</filter-class>    </filter>    <filter-mapping>        <filter-name>AjaxCheckSession</filter-name>        <url-pattern>*.do</url-pattern>    </filter-mapping>


web.xml 分发器 配置如下


    <servlet>        <servlet-name>mes-dispatcher</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>/WEB-INF/mes-dispatcher-servlet.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>mes-dispatcher</servlet-name>        <url-pattern>*.do</url-pattern>        <url-pattern>*.specialdo</url-pattern>    </servlet-mapping>


(1):控制层里面的方法,可以通过   ./xxxxx.do 或者  ./xxxxx.specialdo    来取控制层里面的数据。


(2):可以编写过滤器,只对 Ajax 请求  xxxx/xxxx.do   进行过滤,如果用户未登入 则返回空,如果用户登入 则返回数据 。


import java.io.IOException;import java.util.List;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.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class AjaxCheckSession implements Filter {public AjaxCheckSession() {}public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest httprequest = (HttpServletRequest) request;HttpServletResponse httpresponse = (HttpServletResponse) response;if (httprequest.getHeader("x-requested-with") != null&& httprequest.getHeader("x-requested-with").equals("XMLHttpRequest")) {// System.out.println("XMLHttpRequest----------");String strUser = (String) httprequest.getSession().getAttribute("user_id");List<String> listGroup = (List<String>) httprequest.getSession().getAttribute("listgroupid");if (strUser == null || strUser.length() <= 0) {httpresponse.setHeader("sessionstatus", "timeout");return;}if (listGroup == null || listGroup.isEmpty()){httpresponse.setHeader("sessionstatus", "timeout");return;}httpresponse.setHeader("sessionstatus", "timeok");}chain.doFilter(request, response);}public void init(FilterConfig fConfig) throws ServletException {}}


Spring分发器 可以配置多种分发器类型。

添加多个 url-pattern 

如下:


    <servlet-mapping>        <servlet-name>mes-dispatcher</servlet-name>        <url-pattern>*.do</url-pattern>        <url-pattern>*.specialdo</url-pattern>    </servlet-mapping>




0 0