web工程设置项目的默认访问路径和登录拦截

来源:互联网 发布:新浪股票数据api 编辑:程序博客网 时间:2024/05/16 01:00

在上一篇文章中讲到了maven项目的springmvc和mybatis整合,下面我们讲两个小点:web项目访问的默认页面设置和登录拦截

1.web项目访问的默认页面

一、首先建一个在webapp下的页面login.jsp



二、login.jsp页面内容较为简单:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">        <html>            <head>                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">                <title>test</title>            </head>                        <body>             <h2>欢迎登陆</h2>       <form action="">      登录名:<input name="name"  id="name">      密码:<input name="pwd"  id="pwd">      <button>登陆</button>     </form>    </body> 

三、然后在web.xml中设置欢迎页即可:

<!-- 设置默认的访问首页 -->       <welcome-file-list>    <welcome-file>login.jsp</welcome-file></welcome-file-list> 

四、访问截图:(ip+端口+项目名)即可访问


2.登录拦截器的设置

一、先建立一个filter包和loginFilter类:



二、在写LoginFilter之前我们先确认项目中有没有添加javax.servlet包,如果没有需要在pom.xml加入该jar包

<!-- 添加servlet -->          <dependency>      <groupId>javax.servlet</groupId>      <artifactId>javax.servlet-api</artifactId>      <version>3.0.1</version>  </dependency> 

三、然后我们编写LoginFilter类:
package com.test.filter;import java.io.IOException;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;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class LoginFilter implements Filter{@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {// 判断是否是http请求          if (!(servletRequest instanceof HttpServletRequest)                  || !(servletResponse instanceof HttpServletResponse)) {              throw new ServletException(                      "OncePerRequestFilter just supports HTTP requests");          }          // 获得在下面代码中要用的request,response,session对象          HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;          HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;          HttpSession session = httpRequest.getSession(true);            String[] strs = { "loginpage", "login", "logout", "static" }; // 路径中包含这些字符串的,可以不用登录直接访问          StringBuffer url = httpRequest.getRequestURL();                    /**          * 过滤掉根目录          */          String path = httpRequest.getContextPath();          String protAndPath = httpRequest.getServerPort() == 80 ? "" : ":"                  + httpRequest.getServerPort();          String basePath = httpRequest.getScheme() + "://"                  + httpRequest.getServerName() + protAndPath + path + "/";          if (basePath.equalsIgnoreCase(url.toString())) {              filterChain.doFilter(servletRequest, servletResponse);              return;          }          // 特殊用途的路径可以直接访问          if (strs != null && strs.length > 0) {              for (String str : strs) {                  if (url.indexOf(str) >= 0) {                      filterChain.doFilter(servletRequest, servletResponse);                      return;                  }              }          }          // 从session中获取用户信息          String loginInfo = (String) session.getAttribute("username");          if (null != loginInfo && !"".equals(loginInfo)) {              // 用户存在继续访问此              filterChain.doFilter(servletRequest, servletResponse);          } else {              // 用户不存在返回登录            String returnUrl = httpRequest.getContextPath();              httpRequest.setCharacterEncoding("UTF-8");              httpResponse.setContentType("text/html; charset=UTF-8"); // 转码              httpResponse                      .getWriter()                      .println(                              "<script language=\"javascript\">alert(\"您还没有登录,请先登录!\");if(window.opener==null){window.top.location.href=\""                                      + returnUrl                                      + "\";}else{window.opener.top.location.href=\""                                      + returnUrl                                      + "\";window.close();}</script>");              return;          } }@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}

四、最后验证拦截器设置,直接用我们之前写的user业务请求来访问:http://localhost:9690/test/index.do



拦截成功!


阅读全文
1 0