过滤器Filter--登录案例
2016-10-30 16:51
295 查看
使用@WebFilter过滤器中设置例外URL的一种方式
request.getRequestURI()、getRequestURL()、getContextPath()、getServletPath()区别http://www.imooc.com/video/4479
本例采用注解方式:
@LoginFilter
@WebFilter(dispatcherTypes = {DispatcherType.REQUEST } , urlPatterns = "/*" ,initParams={ @WebInitParam(name="EXCLUDE_PAGE",value="login.jsp;LoginServlet;failure.jsp")}) public class LoginFilter implements Filter {//注意上面注解中,@WebInitparam中value值的大小写,如LoginServlet private FilterConfig config; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse res = (HttpServletResponse) response; HttpSession session = req.getSession(); System.out.println(req.getServletPath()); System.out.println(req.getRequestURI()); //该部分可以考虑封装为一个方法 String string = config.getInitParameter("EXCLUDE_PAGE"); if(string != null) { String[] strArray = string.split(";");//注意是分号; for (int i = 0; i < strArray.length; i++) { System.out.println("..."+strArray[i]); if(strArray[i]==null && "".equals(strArray[i]))continue;//严谨判断 if(req.getRequestURI().indexOf(strArray[i])!=-1) { chain.doFilter(request, response); return;//没有的这句话,chain.doFilter()方法执行完,控制权返回本过滤器,还会往下执行呀,记得加上! } } } /*if(req.getRequestURI().indexOf("login.jsp")!=-1 || req.getRequestURI().indexOf("LoginServlet")!=-1) { chain.doFilter(request, response); return;//没有的这句话,上面执行完后,还会往下执行呀,记得加上! }*/ if(session.getAttribute("username")!=null) { chain.doFilter(request, response); } else { res.sendRedirect(req.getContextPath()+"/login.jsp");// } } public void init(FilterConfig fConfig) throws ServletException { this.config = fConfig; } }
@LoginServlet
@WebServlet("/servlet/LoginServlet") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); if("admin".equals(username)&&"123456".equals(password)) { //检验通过 HttpSession session = request.getSession(); session.setAttribute("username", username); request.getRequestDispatcher("/success.jsp").forward(request, response); } else { //检验失败 request.getRequestDispatcher("/failure.jsp").forward(request, response); } } }
@login.jsp
<%@page pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <% String path=request.getContextPath(); %> <form action="<%=path%>/servlet/LoginServlet" method="post"> 用户名: <input type="text" name="username"/> 密码:<input type="password" name="password"/> <input type="submit" value="提交"/> </form> </body> </html>
@failure.jsp
<%@page pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> 登录失败,请检查用户名或密码 </body> </html>
@success.jsp
<%@page pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> 恭喜${username },登录成功 </body> </html>
2.登录案例采用web.xml配置的部分关键内容:
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.lyt.filter.LoginFilter</filter-class>
<init-param>
<param-name>EXCLUDE_PAGE</param-name>
<param-value>failure.jsp;login.jsp;LoginServlet</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
相关文章推荐
- 过滤器Filter的案例2——自动登录
- filter 过滤器用户登录并判断是否属于电脑端或者手机端访问
- 过滤器Filter的使用(以登录为例子)
- 过滤器(filter)判断用户是否登录
- 【过滤器】(3)过滤器的应用案例:网站自动登录技术(Cookie记忆)
- ssh过滤器小案例(登录)Struts2-0
- 校验用户是否登录过滤器Filter
- 通用的用户登录过滤器(SessionFilter)
- spring boot---WebFilter注解 实现自定义登录过滤器
- JAVAWEB开发之Servlet Filter(过滤器)详解包括post和get编码过滤器、URL访问权限控制、自动登录。以及装饰模式的使用
- Filter登录验证过滤器(全局)
- 基于Filter的简单登录过滤器
- 过滤器Filter的案例3——解决全站的请求数据乱码问题
- JavaWeb之过滤器实现自动登录案例
- 通用的用户登录过滤器(SessionFilter)
- 过滤器Filter的案例4——实现全站的数据的压缩
- Servlet过滤器案例-自动登录
- web day21 web过滤器Filter,应用案例统计IP,解决全站乱码,粗粒度权限控制,页面静态化
- 过滤器(Filter)应用之------设置页面缓存、用户的自动登录和敏感词过滤
- 只有登录成功后,才能访问一些页面(2种方法:1.通过判断sesssion是否为空)2.过滤器Filter