Filter二(利用Filter实现简单的登录验证)
来源:互联网 发布:mac如何删除qq浏览器 编辑:程序博客网 时间:2024/05/19 23:01
Filter二(利用Filter实现简单的登录验证)
目标:1.我们规定利用Filter我们实现一个如果在Url中包含有admin的请求的时候,那么我们就要验证当前的用户是否登录,如果没有登录那么跳转到登录的界面
2.当我们登录成功的时候,我们应该跳回到我们之前请求的页面。
1.首先创建我们的LoginFilter
public class LoginFilter implements Filter{private FilterConfig filterConfig ;public void destroy() {}public void doFilter(ServletRequest serlvetRequest, ServletResponse serlvetResponse,FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) serlvetRequest ; HttpServletResponse httpServletResponse = (HttpServletResponse)serlvetResponse; HttpSession session = httpServletRequest.getSession(); User loginUser= (User)session.getAttribute(ConfigBean.session_login_user); if(loginUser == null){ String url = httpServletResponse.encodeRedirectURL(httpServletRequest.getRequestURL().toString()) ; //throw new NotLoginException(url); httpServletResponse.sendRedirect(ConfigBean.getBasePath()+"error/Login.jsp?returnUrl="+url); }else{ filterChain.doFilter(serlvetRequest, serlvetResponse); } }public void init(FilterConfig filerConfig) throws ServletException { this.filterConfig = filerConfig ;}}
说明:1 .我们利用session去判断我们当前的用户是否是登录了,如果没有redirect登录的界面,同时我们要把我们当前访问的那个界面的url传入到登录的界面,这样在登录成功了,我们就可以返回到我们的请求的页面
2.我们登录的界面是Login.jsp
2.配置我们的DD
<filter><filter-name>loginFilter</filter-name><filter-class>com.filter.LoginFilter</filter-class></filter><filter-mapping><filter-name>loginFilter</filter-name><url-pattern>/admin/*</url-pattern></filter-mapping><servlet><servlet-name>Login</servlet-name><servlet-class>com.filter.Login</servlet-class></servlet><servlet-mapping><servlet-name>Login</servlet-name><url-pattern>/Login.do</url-pattern></servlet-mapping>在下面的这段DD中:
<filter-mapping><filter-name>loginFilter</filter-name><url-pattern>/admin/*</url-pattern></filter-mapping>我们规定了,那些Url的请求我们是要进行过滤的,如果你是有多个,那么有多个filter-mapping 标签就行了。
说明:当我们如果访问http://localhost:8887/Servlet/admin/requestAction.do 那么就会调转到我们登录的界面如图:
可以看见我们的Url地址的后面添加了一个ReturnUrl的参数
3.编写我们Login.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><c:set var="baseUrl" value="<%= ConfigBean.getBasePath() %>"></c:set> NotLoginException.jsp <br /> <form action="${baseUrl }Login.do" method="post"> <input type="hidden" name="returnUrl" value='${param.returnUrl }'/> <table> <tr> <td>UserName : </td> <td><input type="text" name="username" /></td> </tr> <tr> <td>password : </td> <td><input type="text" name="password" /></td> </tr> <tr> <td colspan="2"> </td> <td><input type="submit" value="登录" /></td> </tr> </table> </form> </body>
说明:1.ConfigBean只是我的一个全局的类,里面包含了一些系统常用的参数,比如说我这里的basePath
2.我们把returnUrl 利用El表达式从param中取出来放到input 的隐藏域里面提交。
4.编写Login.do
String userName =req.getParameter("username");String password = req.getParameter("password");String returnUrl = req.getParameter("returnUrl");System.out.println(returnUrl);User user = new User();user.setUserName(userName);user.setPassword(password);//loginHttpSession session = req.getSession();session.setAttribute(ConfigBean.session_login_user, user);if(returnUrl != null && returnUrl.trim().length() > 0 ){resp.sendRedirect(returnUrl);}else{//返回 main.jsp 或者是Serlvet }
当我们第二次请求(session 没用过期) 那么会直接访问到我们请求的Url地址 (请记住我们这里是拦截 url中含有/admin/的请求)
5.编写我们最开始请求的requestAction.do
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { PrintWriter pw =resp.getWriter() ; try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} pw.write("MH370"); pw.flush(); pw.close();}
思考:1.有的时候我们是用ajax提交的登录的数据的,你可以把登录成功过后,returnUrl的地址放回到 success(data) ,data 中,然后利用js 去发起一个新请求.
2.我们现在看很多的网站的时候,有的登录界面是在页面上弹出一个 对话框去登录。(比如我们需要回复某一个帖子,那么可能需要你是登录的人才可以操作,要是想这样点击回复的时候,跳转到新的界面登录,然后再跳转回去,好像不太好。)
对于第二个问题,我们可以在点击“回复”的时候,在上面Filter的处理我们就不用重新定向到一个页面了,直接通过response返回一个write("<javascripte>openLogin()</javascripte>") ; 这样我们在页面引入对应的js 就可以弹开我们登录界面了。
现在有个问题? 如果是我请求的Url中带有查询参数,现在的测试结果是我们没有传递过去。
- Filter二(利用Filter实现简单的登录验证)
- javaee初识-利用Filter实现登录验证
- java web项目利用Filter进行单点登录的简单实现(解决方案)
- java web项目利用Filter进行单点登录的简单实现
- 简单的Filter实现
- Struts中用Filter实现每个页面的登录验证
- Struts中用Filter实现每个页面的登录验证(转)
- filter实现登录验证,并且过滤servlet
- 使用filter过滤器实现用户登录验证
- Java 利用过滤器Filter 实现登录过滤
- 利用Filter实现用户自动登录
- SpringMVC-利用filter实现安全登录
- Javaweb验证登录 Filter
- filter过滤器登录验证
- 过滤器Filter的应用:登录验证
- 利用cookie, session 和Filter实现简单的自动登陆
- filter实现登录验证,并实现页面跳转到登录前浏览的页面(同步异步皆可)
- 利用Filter完成的登录功能【练习】
- C++第一次作业
- SQL编程实例:SQL数据库,存储过程+事务处理+回滚+数据迁移
- linux内核锁机制实例代码-不可睡眠锁之自旋锁之二
- VS2010环境下OpenCV&OpenGL配置
- 【Java基础】代理 - Proxy
- Filter二(利用Filter实现简单的登录验证)
- onInterceptTouchEvent和onTouchEvent举例分析
- Android--侧滑菜单应用的实现
- OnTouchListener事件监听实现方式之GestureDetector
- erlang 语法练习
- 开放Java Servlet需要的Jar包
- select into from 与 insert into select 区别鉴赏
- 比较简单 就到这了
- 设计模式学习之——六大设计原则之三:依赖倒置原则