SMM框架添加自定义filter
2017-03-23 13:30
155 查看
首先在web.xml中添加myFilter,可以在init-param中根据自己的需求添加一些自定义的参数
MyFilter类实现servlet的Filter接口,在启动tomcat的时候会加载init方法,可在init中初始化一些参数,每次请求时会执行doFilter,在doFilter中写入自己的逻辑进行过滤
controller中用户登录验证后将信息写入session
到此,一个简单的自定义filter就实现了,可以进行登录的过滤,其他的过滤逻辑根据自己的需求添加即可。
<filter> <filter-name>myFilter</filter-name> <filter-class>com.is.common.filter.MyFilter</filter-class> <init-param> <!--添加一些例外的路径,准备让过滤器放行--> <param-name>exceptPath</param-name> <param-value> /,*.js,*.html,*.css,*.png,*.jpg,*.ico,*.gif, *login,*index.html </param-value> </init-param> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <!--所有的请求将经过filter --> <url-pattern>/*</url-pattern> </filter-mapping> <!--配置springMVC 的转发器 --> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <!-- *.do的请求将经过DispatcherServlet转发 --> <url-pattern>*.do</url-pattern> </servlet-mapping>
MyFilter类实现servlet的Filter接口,在启动tomcat的时候会加载init方法,可在init中初始化一些参数,每次请求时会执行doFilter,在doFilter中写入自己的逻辑进行过滤
import java.io.IOException; 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; import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; public class MyFilter implements Filter { // 例外路径,不做拦截 String[] exceptStrs; @Override public void destroy() { // System.out.println("-------destory filter------"); } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { // System.out.println("-------do filter------"); HttpServletRequest hreq = (HttpServletRequest) req; HttpServletResponse hresp = (HttpServletResponse) resp; String path = hreq.getRequestURI(); // System.out.println("-------requset url:" + path + "------"); toDoFilter(isExceptPath(path), hreq, hresp, chain);//执行具体的过滤 } @Override public void init(FilterConfig config) throws ServletException { // System.out.println("-------init filter------"); //获取xml中配置的inin-param exceptStrs = config.getInitParameter("exceptPath").replace(" ", "").replace(" ", "").replace("\n", "").replace("\r\n", "").split(","); } /** * * @Title: isExceptPath * @Desc: 判断请求路径是否例外 * * @param path * @return 参数 * */ private boolean isExceptPath(String path) { if (StringUtils.isEmpty(path)) { return true; } for (String e : exceptStrs) { if (e.startsWith("*")) {//含前通配符 if (StringUtils.endsWith(path, e.substring(1))) { return true; } } else if (e.endsWith("*")) {//含后通配符 if (StringUtils.startsWith(path, e.substring(0, e.length() - 1))) { return true; } } else { if (path.equals(e)) {//不含通配符 return true; } } } return false; } /** * * @Title: toDoFilter * @Desc: 过滤请求 * * @param isExcept * @param req * @param resp * @param chain * @throws IOException 参数 * @throws ServletException * */ private void toDoFilter(boolean isExcept, HttpServletRequest req, HttpServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpSession session = req.getSession(); if (!isExcept) {//非例外的路径,进行自定义过滤 //根据session判断用户是否已经登录 if (session == null || session.getAttribute("user") == null){ resp.sendRedirect("/index.html");//未登录,则跳转到登录页面 return; } } //........其他的过滤逻辑 chain.doFilter(req, resp);//继续执行过滤链,不写则只能得到空白的页面 } }
controller中用户登录验证后将信息写入session
/** * * @Title: login * @Desc: 用户登录 * * @param user * @param request * @return 参数 * */ @ResponseBody @RequestMapping(value = "/login", method = RequestMethod.POST) public JSONObject login(User user, HttpServletRequest request,HttpServletResponse response) { // 验证用户和密码 User u = userService.login(user); JSONObject jsonObject = new JSONObject(); if (u != null) {//查询到用户 //将用户信息写入session request.getSession().setAttribute("user", u); jsonObject.put("result", Constant.SUCCESS); } else { jsonObject.put("result", Constant.FAIL); } return jsonObject; }
到此,一个简单的自定义filter就实现了,可以进行登录的过滤,其他的过滤逻辑根据自己的需求添加即可。
相关文章推荐
- Yii2框架 model方法下setAttributes用法(自定义model 添加方法)
- Spring Boot添加自定义Filter
- 【J2ME】KUIX框架——添加自定义的属性
- Laravel5框架添加自定义辅助函数的方法
- 如何给filter添加自定义接口及调用 分类: DirectX 2014-10-24 14:47 455人阅读 评论(0) 收藏
- XCode7添加自定义framework 比如加入swiftjson.framework框架后运行真机出现dyld: Library not loaded的解决方法
- 如何给filter添加自定义接口及调用
- 如何给filter添加自定义接口及调用
- 使用自定义模板为Myeclipse添加新建Filter的功能
- YII框架中使用CDbcriteria添加自定义条件时表别名冲突问题
- 使用自定义模板为Myeclipse添加新建Filter的功能
- [django]添加自定义template filter标签
- 如何给filter添加自定义接口 分类: DirectX 2014-10-24 08:59 499人阅读 评论(0) 收藏
- 如何给filter添加自定义接口及调用
- [django]添加自定义template filter标签
- Android框架层添加自定义服务
- js框架 dwz jui 的日历组件 添加自定义事件
- 如何给filter添加自定义接口
- Spring Boot添加自定义Filter
- springboot集成Shiro,添加自定义filter后shiro的默认filter无法使用