java过滤器原理分析以及实现,通过过滤器实现自动登陆
2017-10-31 23:12
621 查看
1、过滤器
1、过滤器
1.1、过滤器的原理
1.2、过滤器的配置
1.3、过滤器的生命周期
1.4、过滤器的自动登陆实现
9db1
1、过滤器
1.1、过滤器的原理
1、Filter过滤器, □ 它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 □ 它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理
1.2、过滤器的配置
<filter>指定一个过滤器。 <filter-name>用于为过滤器指定一个名字,该元素的内容不能为空</filter-name> <filter-class>元素用于指定过滤器的完整的限定类名。</filter-class> <init-param>元素用于为过滤器指定初始化参数 <param-name>指定参数的名字</param-name> <param-value>指定参数的值</param-value> </init-param> 在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。 <init-param>元素用于为过滤器指定初始化参数 <param-name>指定参数的名字</param-name> <param-value>指定参数的值</param-value> </init-param> 在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。 </filter> <filter-mapping>元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径 <filter-name>子元素用于设置filter的注册名称</filter-name> <url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)</url-pattern> </filter-mapping>
1.3、过滤器的生命周期
当web容器启动的时候,自动调用过滤器的init(FilterConfig arg0)方法来对filter进行初始化,当web关闭,关机,或者reload整个应用时,都会调用destroy()来关闭filter。在容器存活期间,filter过滤器一直是存活的。
1.4、过滤器的自动登陆实现
//1、如果session中存在user,直接放行 //2、如果不存在session,到cookie中获取用户名密码 //2.1如果有用户名密码,到数据库查询是否在 //2.1.1如果存在,存在session中,放行 //2.1.2如果不存在,放行。 //2.2如果用户名密码不存在,放行。 HttpServletRequest req = (HttpServletRequest)request; User user = (User)req.getSession().getAttribute("user"); //1、如果session中存在user,直接放行 if(user!=null){ chain.doFilter(req, response); }else{ //session中不存在。到cookie中去查找。ctrl+2 l Cookie[] cookies = req.getCookies(); String userJson = ""; for (Cookie cookie : cookies) { if("user".equals(cookie.getName())){ userJson = cookie.getValue(); } } //cookie中不存在用户信息 if("".equals(userJson)||userJson==null){ chain.doFilter(req, response); }else{ //cookie中存在用户信息 user = JsonUtils.jsonToPojo(userJson, User.class); QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); String sql = "select * from user where username = ? and password =?"; try { user = qr.query(sql, new BeanHandler<User>(User.class),user.getUsername(),user.getPassword()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(user==null){ chain.doFilter(req, response); }else{ req.getSession().setAttribute("user", user); chain.doFilter(req, response); } } }
9db1
相关文章推荐
- jQuery的datatable的使用例子,以及通过例子分析datatable插件的实现过程,即不但要会用,还要懂其原理
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- [导入]C#实现通过HttpWebRequest发送POST请求实现网站自动登陆
- C#实现通过HttpWebRequest发送POST请求实现网站自动登陆
- C#实现通过HttpWebRequest发送POST请求实现网站自动登陆
- Servlet过滤器----------例子:实现用户自动登陆的过滤器
- C#实现通过HttpWebRequest发送POST请求实现网站自动登陆
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- 通过JS自动隐藏手机浏览器的地址栏实现原理与代码
- 6Filter应用5实现用户自动登陆的过滤器
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- QQ登陆实现原理分析
- MSN协议分析以及Java实现MSN登陆
- C#实现通过HttpWebRequest发送POST请求实现网站自动登陆
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- Sphinx API类型以及SphinxSE实现原理分析