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

在上一篇文章中讲到了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{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public 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;  
        } 
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

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



拦截成功!


猜你喜欢

转载自blog.csdn.net/yufeng005/article/details/78064236