笔记,只供自己参考,水平相当菜
配置过滤器,拦截用户请求,如果用户没有登录,就转到登录页面,登录成功后再返回到之前的页面
1 在web.xml中加入过滤器的配置
<?xml version="1.0" encoding="GBK"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"metadata-complete="true" version="3.0"><display-name>魔兽世界</display-name><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><servlet><servlet-name>login</servlet-name><servlet-class>servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>login</servlet-name><url-pattern>/login</url-pattern></servlet-mapping><!-- 定义Filter --><filter><filter-name>authority</filter-name><filter-class>filter.AuthorityFilter</filter-class><init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param><init-param><param-name>loginPage</param-name><param-value>/login</param-value></init-param><init-param><param-name>ignoreTypes</param-name><param-value>css</param-value></init-param><init-param><param-name>proLogin</param-name><param-value>/proLogin</param-value></init-param></filter><filter-mapping><filter-name>authority</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

2 写过滤器 AuthorityFilter.java

package filter;import java.io.IOException;
import java.net.URLEncoder;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;/*** Servlet Filter implementation class AuthorityFilter*/
@WebFilter("/AuthorityFilter")
public class AuthorityFilter implements Filter
{private FilterConfig config;private String encoding;private String loginPage;private String ignoreType;/*** Default constructor.*/public AuthorityFilter(){// TODO Auto-generated constructor stub}/*** @see Filter#destroy()*/public void destroy(){config = null;}/*** @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)*/public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException{long before = System.currentTimeMillis();System.out.println("/*******************/\nAuthorityFilter开始过滤...");HttpServletRequest hrequest = (HttpServletRequest) request;String requestPath = hrequest.getServletPath(); // 这里是不包含?以及?后面的字符串的System.out.println("AuthorityFilter截获到用户请求的地址:"+ hrequest.getServletPath());// 设定编码request.setCharacterEncoding(encoding);// 是否是要忽略的类型if (requestPath.endsWith(ignoreType)){chain.doFilter(request, response);} else{HttpSession session = hrequest.getSession();if (session.getAttribute("user") == null&& !requestPath.endsWith(loginPage)){HttpServletResponse res = (HttpServletResponse) response;String ReturnUrl = URLEncoder.encode(config.getServletContext().getContextPath() + requestPath,"GBK"); res.sendRedirect(config.getServletContext().getContextPath()+ loginPage + "?ReturnUrl=" + ReturnUrl);//res.sendRedirect("http://www.baidu.com");System.out.println("AuthorityFilter已经把页面重定向到登录页面");} else{chain.doFilter(request, response);System.out.println("AuthorityFilter过滤结束");System.out.println("请求被AuthorityFilter定位到"+ hrequest.getRequestURI());}}long after = System.currentTimeMillis();System.out.println("AuthorityFilter所花时间为:" + (after - before)+ "\n/*******************/");}/*** @see Filter#init(FilterConfig)*/public void init(FilterConfig fConfig) throws ServletException{this.config = fConfig;encoding = config.getInitParameter("encoding");loginPage = config.getInitParameter("loginPage");ignoreType = config.getInitParameter("ignoreTypes");}}

3 修改LoginServlet.java

package servlet;import java.io.IOException;
import java.net.URLDecoder;
import java.sql.ResultSet;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import dao.DbDao;/*** Servlet implementation class LoginServlet*/
@WebServlet(description = "登录控制器", urlPatterns = { "/login" })
// 如果在web.xml中配置了,在Annotation中的配置就不会有效果
public class LoginServlet extends HttpServlet
{private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public LoginServlet(){super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#service(HttpServletRequest request, HttpServletResponse*      response)*/protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{System.out.println("LoginServlet开始处理用户登录请求:" + request.getRequestURI());String errMsg = "";HttpSession session = request.getSession(true);RequestDispatcher rd;String username = request.getParameter("username");String pass = request.getParameter("pass");String returnUrl = null;String rawQueryString = request.getQueryString();if (rawQueryString != null){System.out.println("带有参数" + rawQueryString);try{String queryString = URLDecoder.decode(rawQueryString, "GBK");String[] paramPairs = queryString.split("&");String[] nameValue = paramPairs[0].split("=");if (nameValue[0].equalsIgnoreCase("ReturnUrl")){returnUrl = nameValue[1];}} catch (Exception e){e.printStackTrace();returnUrl = null;}}if (returnUrl != null){session.setAttribute("returnUrl", returnUrl);}if (username != null){try{DbDao dd = new DbDao("oracle.jdbc.driver.OracleDriver","jdbc:oracle:thin:localhost:1521:orcl", "system","abc123");ResultSet rs = dd.query("select pass from user_table "+ "where name=?", username);if (rs.next()){if (rs.getString("pass").equals(pass)){session.setAttribute("user", username);String reUrl = (String) session.getAttribute("returnUrl");if (session.getAttribute("returnUrl") == null) {System.out.println("登录成功,跳到欢迎页面");((HttpServletResponse) response).sendRedirect(getServletContext().getContextPath() + "/welcome.jsp");} else{System.out.println("登录成功,返回之前的页面");((HttpServletResponse) response).sendRedirect(reUrl);}} else{errMsg += "您的用户名密码不符合,请重新输入";}} else{errMsg += "您的用户名不存在,请先注册";}} catch (Exception e){e.printStackTrace();}}if ((errMsg != null && !errMsg.equals("")) || username == null){System.out.println("forward到login.jsp");rd = request.getRequestDispatcher("/login.jsp");request.setAttribute("err", errMsg);rd.forward(request, response);// (1)请求被redirect到/login?returnUrl...,让浏览器重新发送一个请求,这个请求为/login?returnUrl...// (2)浏览器发送这个请求,把地址刷新为/login?returnUrl...// (3)服务器记下returnUrl,把请求forword到login.jsp。login.jsp输出响应// (4)浏览器收到响应,渲染页面。地址栏还是login?returnUrl// (5)浏览器向服务器发送post请求,此时发的请求就是/login。// 浏览器的地址栏显示什么,是由浏览器根据它发送的请求决定的,此时它的请求是/login,所以它的地址栏就变成了/login}}}

JSP/Servlet基础——登录成功后返回之前的页面相关推荐

  1. Spring Security 实战:登录成功后返回 JWT Token

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 170元买400元书的机会又来啦! 1. 前言 欢迎阅读 Spring Security 实 ...

  2. Vue项目登录成功后返回到原操作页面

    登录超时或者由于其它原因,造成必须重新登录的情况,相信大家都见过这种场景,比较偷懒的办法是登陆成功厚直接回到主页面,但其实我们有更好的解决办法. 作为vue的标配,我们可以利用axios的全局拦截器做 ...

  3. 登录成功后跳回到原来页面

    应用场景:一般网页游客和登录用户看到的内容是有区别的,如果一个未登录的用户在看到登录提示后跳转到登录界面登录,那么登录成功后怎么返回到该页面呢? 写这篇博客是因为我自己把解决问题的方向想偏了,本来实现 ...

  4. 登录成功后怎么跳转页面html,怎么设置登录成功后跳转到相应的页面

    想要用angularjs实现的功能是 一进入就是一个登录页面(login.html),如果没有账号密码就注册,登录成功后跳转到相应的页面(shopcart.html) 碰到的问题 1.一进入页面没有显 ...

  5. uniapp之 登录成功后返回之前页面

    目录 前言 分析 第一步 代码 代码 一 方式二 温馨提示 小结 前言 在完善小程序效果时,想新增一个当用户没有登录时 点击跳转到某个页面实现交易啊,或者添加什么功能时,检验有没有登录 若没有的话 , ...

  6. springboot shiro ajax,SpringBoot Shiro 登录成功后返回json数据 shiro使用ajax登录

    老规矩,先上代码: protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletReques ...

  7. 防止登录成功后重复刷新页面跳回登录页面

    登录action:system/Syslogin/sysLogin.do public String sysLogin() { try { //验证码验证 String yzm = Struts2Ut ...

  8. 怎么在html显示已登录状态,登录成功后,返回时不再显示登录等已经没用的页面...

    wap2app适配的时候,常碰到的一个场景就是登录,wap站登录成功后,比较差的体验主要有两个: 1.back依然可以看到登录页,效果很差 2.首页如果有登录入口,返回首页,首页依然显示未登录的状态 ...

  9. Tencent login函数登录成功后无法成功回传数据(无法返回回调方法) Android qq授权登录

    找了一下午问题在哪里,总是无法成功回传数据,后来才发现自己没有好好看Tencent的开发文档 在某些低端机上调用登录后,由于内存紧张导致APP被系统回收,登录成功后无法成功回传数据. mTencent ...

最新文章

  1. Dialog 带白色的边的处理方法
  2. TCP/IP中 3688端口是什么?
  3. 机器学习中的数学-线性判别分析(LDA), 主成分分析(PCA)
  4. windows cannot ftp_免费自动FTP同步软件,6步掌握免费自动FTP同步软件的安装方法...
  5. Java基础:成员变量的继承与覆盖
  6. 干货 | 国内互联网公司是如何做微服务实践的?(附PPT下载)
  7. 视频 + PPT 下载 | 《财富管理数字化转型现状与趋势洞察报告》解读第一讲
  8. xcode扩展_如何将Xcode插件转换为Xcode扩展名
  9. win10电脑插耳机没声音_电脑没有声音是什么原因 教您电脑突然没声音怎么解决...
  10. centos7 python3.7 ssl_centos 解决python3.7 安装时No module named _ssl
  11. C++_类和对象_封装_成员属性私有化---C++语言工作笔记038
  12. 第二模块:函数编程 第1章·文件处理、函数、装饰器、迭代器、内置方法
  13. c语言入门视频教程-
  14. 迅捷fw313r服务器无响应,FAST迅捷FW313R路由器的固件更新教程
  15. 雄迈摄像头研究笔记二:系统的研究
  16. Python编写三角形
  17. 云渲染服务器快吗?云渲染具体怎么用??
  18. 大咖发声 | 聊聊互联网安全建设从0到1的那些事儿
  19. android 开发相机焦距解析之调节远近焦距
  20. JAVA中计算五子棋平局的算法_输入五子棋棋盘判断输赢或平局—程序设计(C语言)...

热门文章

  1. md5加密算法(密码加密)
  2. Volley NoConnectionError(IOException:unexpected end of stream on Connection)原因之一与解决方案
  3. IOS学习之蓝牙4.0 BLE
  4. 让我们一起读一张证书吧!
  5. 手工纸盒子_儿童手工制作:纸箱纸盒子的大变身,这样的改造很有创意!
  6. selenium 找不到元素:Unable to find element on closed window
  7. kernel\sound\soc\s3c24xx\Valar_wm89xx.c
  8. 【命令提示符cmd】
  9. 提高个人工作效率的五大软件,你肯定不知道
  10. 常用安全设置 iftop查看当前流量 CC攻击防