您的位置:首页 > 其它

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

2017-09-22 16:22 483 查看

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



拦截成功!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐