看到好多网站都有这么一个功能,就是没登陆的时候,有些页面是可以查看的,但是必须要登陆才能进行操作,很多朋友在开发过程中为防止这样的事情发生也许会做一个提示框,或直接将用户界面重定向到登陆界面,其实这两种的用户用户体验效果都不是很好,其实,用户想操作,我们需要用户登陆,这是没问题的,问题就是我们在处理完用户登陆后,能继续让用户之前的操作流转下去呢,这种实现方式我感觉更好,当然很多网站也都这么实现的,下面我们来简单实现以下。
1、首先一个过滤器,对非法的操作进行拦截,同时保存当前的请求。
package com.lyl.servlet; import java.io.IOException; import java.util.Arrays; import java.util.List; 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; public class LoginFilter implements Filter { private String [] urls; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req=(HttpServletRequest)request; String url=req.getRequestURI(); System.out.println("url==="+url); System.out.println("contextPath=="+ req.getContextPath()); url=url.replace(req.getContextPath()+"/", ""); List<String> urlList= Arrays.asList(urls); if(!urlList.contains(url)){ Object o=req.getSession().getAttribute("user"); if(o !=null){ chain.doFilter(request, response); }else{ if(req.getQueryString() !=null) url=url+"?"+req.getQueryString(); req.setAttribute("reqURL",url); req.getRequestDispatcher("/login.jsp").forward(request, response); } }else{ chain.doFilter(request, response); } } @Override public void init(FilterConfig config) throws ServletException { System.out.println("--------------------Filter进行了初始化------------------"); String urlStr=config.getInitParameter("noInterruptUrl"); urls=urlStr.split(","); } @Override public void destroy() { System.out.println("--------------------Filter进行了销毁------------------"); } }
2、登陆成功方法后续处理:如果之前的请求路径不为空,转发到之前的页面。
package com.lyl.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 4488742375496278371L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String userName=req.getParameter("userName"); String password=req.getParameter("password"); User user=new User(); user.setUserName(userName); user.setPassword(password); String reqURL=req.getParameter("reqURL"); req.getSession().setAttribute("user", user); String dispatcher="bidding.jsp"; //如果登录页面保存之前的请求路径不为空,取出之前的请求路径,转发到之前的请求页面 if(reqURL !=null && !"".equals(reqURL)){ dispatcher=reqURL; } req.getRequestDispatcher("/"+dispatcher).forward(req, resp); } }
3、web.xml中配置需要不需要拦截的路径,过滤器初始化操作的时候,进行取值。
<filter> <filter-name>loginFilter</filter-name> <filter-class>com.lyl.servlet.LoginFilter</filter-class> <init-param> <param-name>noInterruptUrl</param-name> <param-value>login.jsp,login.do,bidding.jsp</param-value> </init-param> </filter>
说白了其实原理很简单,进行非登录拦截的时候,顺便存下之前的请求路径,在后面登陆成功后,转发到之前是请求路径就ok了,有兴趣的朋友可以试下,附上源代码。
相关推荐
该库具有的功能崩溃处理相关模块:崩溃重启操作,崩溃记录日志操作,崩溃日志列表支持查询,删除,查看详情,分享,保存文本,以及截图等操作。网络分析库模块:网络流程分析,记录每个网络请求->响应数据,方便查看...
该模块利用axios的拦截器将请求记录为cURL命令。 还将其存储在响应的config对象中。 因此,可以在应用程序的控制台以及响应的res.config.curlCommand属性中看到该命令。 更换记录仪 默认情况下,axios-curlirize使用...
一、介绍说明 mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似...1、拦截HTTP和HTTPS请求和响应 2、保存HTTP会话并进行分析 3、模拟客户端发起请求,模拟服务器端返回响应 4、利用反向代理将流量转发给指定的服务器
Proxyman专为开发人员和网络爱好者设计,它允许用户拦截、查看和修改所有传入和传出的网络请求,并提供详细的分析和调试功能。 Proxyman支持HTTP、HTTPS和WebSocket协议,因此,可以轻松捕获和查看这些协议下的网络...
模块编程题 ...使用过滤器对添加用户的请求进行拦截,判断是否是未登录状态 未登录:跳转到登陆页面 已登陆:放行到目标资源,完成添加操作 提示:用户登陆时,将用户信息存到session中,过滤器
使用过滤器对添加用户的请求进行拦截,判断是否是未登录状态 未登录:跳转到登陆页面 已登陆:放行到目标资源,完成添加操作 提示:用户登陆时,将用户信息存到session中,过滤器中判断session中有没有用户...
使用filter拦截用户的请求,在filter中包装request,在request的包装类requestWrapper中,重写getSession(), 和getSession(boolean create)。自己实现httpSession,在getSession中获取cookie,从cookie中读取...
在使用spingMVC的拦截器来处理用户session失效的问题时,当用户session失效会返回一串javascript字符串强制用户浏览器跳转至登录页面。然而当使用Ajax请求数据时,在验证失败后只会响应一串字符串,JavaScript并不会...
springSecurity(权限验证和请求拦截) AES对称加密数据,RSA非对称加密公钥key(对用户信息进行加密) redis缓存token(token作为用户的标识,维护用户的状态,类似于session) redis结合ActiveMQ发送短信验证码和防止...
当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝。 Web应用缓存技术大体上可以分为两类:服务端缓存和客户端缓存。两种目标都是减少重复性内容的生成和网络传输工作,因为缓存数据存储的位置...
mitmproxy 是 man-in-the-middle proxy 的简称,译为中间人代理工具,可以用来拦截、修改、保存 HTTP/HTTPS 请求。以命令行终端形式呈现,操作上类似于Vim,同时提供了 mitmweb 插件,是类似于 Chrome 浏览器开发者...
当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。 session可以和Redis或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)丢失。 二、session的工作流程...
该命令将拦截您的请求,并将响应转换为测试。 完成后,您的测试将保存在测试/功能/ 视频演示 它测试什么? 请求充当同一用户 使用带有相同参数的相同动词(GET,PUT,POST)发出请求 断言http响应代码 断言错误 ...
springSecurity(权限验证和请求拦截) AES对称加密数据,RSA非对称加密公钥密钥(对用户信息进行加密) redis缓存令牌(令牌作为用户的标识,维护用户的状态,会话) redis结合ActiveMQ发送短信验证码和防止...
本平台提供精确到操作的简化实现,提出“行为”的概念,即将需要控制的操作URL作为“行为”进行统一管理,后台在监听到有相关请求进,对用户权限进行判定,看是否有对应的权限分配;为方便操作,目前将“行为”绑定...
实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
添加映射路径,我们拦截一切请求 返回新的CorsFilter 提交方式 GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源 BUG 分类不能打开,当添加后却能打开。 修改一天的BUG 最后发现...
实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...