您的位置:首页 > 编程语言 > Java开发

Spring MVC servlet、filter和sitemesh配置问题

2016-01-12 16:02 471 查看
本文共记录三个问题,有责共勉。基于XML配置方式的Spring MVC。Java类配置流的可以忽略。1.Servlet开始。正常配置:
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
错误配置:

<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
出现问题的现象如图,自动把返回的代码加到了<pre>标签里:
2.session filter 和sitemesh这里不给出错误的配置,sitemesh怎么配置自己去搜,基于sitemesh已经正常运行来说明。只贴出正确的代码,然后进行说明如图添加了 session filter
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.zsf.monkey.filters.LoginFilter</filter-class>
<init-param>
<param-name>excludedPages</param-name>
<param-value>userLogin,static</param-value>  ----不进行filter验证的请求路径
</init-param>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!--sitemesh-->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

下面是LoginFilter类

public class LoginFilter extends GenericFilterBean {

/**
* 需要排除的页面
*/
private String excludedPages;

private static String[] excludedPageArray;

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
boolean isExcludedPage = false;
for (String page : excludedPageArray) {//判断是否在过滤url之外
if (request.getServletPath().indexOf(page)>0) {   //这里网上的demo给出的都是 request.getServletPath.equals(page),这里之所以换成indexof,是因为css,js等文件的请求也会进这里,所以<param-value>userLogin,static</param-value> 这里面给的参数就是,第一个就是登陆的action,第二个就是静态文件所在的文件夹

isExcludedPage = true;
break;
}
}
if (isExcludedPage) {//在过滤url之外
filterChain.doFilter(servletRequest, servletResponse);
} else {//不在过滤url之外,判断session是否存在
// 从session中获取登录者实体
Object obj = request.getSession().getAttribute("user");
if (null == obj) {
((HttpServletResponse) servletResponse).sendRedirect("/home/userLogin");
return;
}
}
}

/**
* 初始化函数,获取需要排除在外的url
*/
@Override
public void initFilterBean() { //这个方法是GenericFilterBean 的重构,会在tomcat启动的时候执行,在这里的作用就是在启动的时候就把要排除的url加载进来,网上的demo大多没重写这个方法,直接在doFilter里定义了一个数组,这样写low爆了

FilterConfig filterConfig = getFilterConfig();
excludedPages = filterConfig.getInitParameter("excludedPages");
if (StringUtils.isNotEmpty(excludedPages)) {
excludedPageArray = excludedPages.split(",");
}
}

}

ok,到此为止。本人半路出家,路子可能比较野,希望能给大家一些帮助,然后也希望大家不吝赐教,指教不足。




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: