java web 过滤器登录_Java web过滤器验证登录(避免未经登录进入主页)

本文介绍了如何在Java Web应用中实现登录过滤器。通过配置web.xml并创建自定义的LoginFilter类,该过滤器检查用户请求,如果未登录则重定向到登录页面。过滤器会忽略特定的不受登录限制的URL,并从HttpSession中获取用户信息以判断登录状态。
摘要由CSDN通过智能技术生成

要想实现此功能,分以下两步:

1.配置web.xml:

LoginFilter

com.yusj.core.filter.LoginFilter

LoginFilter

/*

2.创建过滤器实现类,实现Filter接口:

package com.yusj.core.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;

/**

*

* @ClassName: LoginFilter

* @Description: 登录过滤器

* @author shaojian.yu

* @date 2014年11月3日 下午1:19:28

*

*/

public class LoginFilter implements Filter {

/**

*

* Title:doFilter

* Description: 所有请求都走此过滤器来判断用户是否登录

* user: shaojian.yu

* date: 2014 2014年11月3日

* @param servletRequest

* @param servletResponse

* @param filterChain

* @throws IOException

* @throws ServletException

* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)

*/

@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() + "/loginpage";

httpRequest.setCharacterEncoding("UTF-8");

httpResponse.setContentType("text/html; charset=UTF-8"); // 转码

httpResponse

.getWriter()

.println(

"

+ returnUrl

+ "\";}else{window.opener.top.location.href=\""

+ returnUrl

+ "\";window.close();}");

return;

}

}

@Override

public void init(FilterConfig arg0) throws ServletException {

}

@Override

public void destroy() {

}

}

工作中遇到,留备用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值