servlet+jsp实现过滤器,防止用户未登录访问

我们可能经常会用到这一功能,比如有时,我们不希望用户没有进行登录访问后台的操作页面,而且这样的非法访问会让系统极为的不安全,所以我们常常需要进行登录才授权访问其它页面,否则只会出现登录页面,当然我的思路:

一种是在jsp页面进行session的判断,如果不存在该用户的session,就跳转到登录页面,否则执行jsp页面代码,但是你会发现这样做逻辑也简单,但是非常麻烦,如果有很多个jsp,那么就要写多个判断

另一种则是利用过滤器,访问页面时都进行过滤验证,如果存在该用户session,则访问该页面,否则跳转到登陆页面登录,保存session后访问其它页面

一下是我的实现

package com.test.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
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 {
        public static final String login_page = "/test/admin/index.jsp";
	public static final String logout_page = "/test/admin/Public/login.jsp";
	public void destroy(){

	}
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws ServletException, IOException {
		HttpServletRequest request = (HttpServletRequest)servletRequest;
		HttpServletResponse response = (HttpServletResponse)servletResponse;
		String currentURL = request.getRequestURI();
		String ctxPath = request.getContextPath();
		//除掉项目名称时访问页面当前路径
		String targetURL = currentURL.substring(ctxPath.length());
		HttpSession session = request.getSession(false);
		//对当前页面进行判断,如果当前页面不为登录页面
		if(!("/admin/Public/login.jsp".equals(targetURL))){
			System.out.println("1"+targetURL+"ctxPath:"+ctxPath+"currentURL:"+currentURL);
			//在不为登陆页面时,再进行判断,如果不是登陆页面也没有session则跳转到登录页面,
			if(session == null || session.getAttribute("admin") == null){
				response.sendRedirect(logout_page);
				return;
			}else{
				//这里表示正确,会去寻找下一个链,如果不存在,则进行正常的页面跳转
				filterChain.doFilter(request, response);
				return;
			}
		}else{
			//这里表示如果当前页面是登陆页面,跳转到登陆页面
			filterChain.doFilter(request, response);
			return;
		}

	}
	public void init(FilterConfig filterConfig)throws ServletException{

	}

}

接下来在web.xml中进行配置

<filter>
  <filter-name>LoginFilter</filter-name>
  <filter-class>com.test.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>LoginFilter</filter-name>
  //这里表示对所有的以jsp后缀的文件有效,其它的无效
  <url-pattern>*.jsp</url-pattern>
  </filter-mapping>

那么,这样功能就实现了

时间: 2024-10-03 13:10:06

servlet+jsp实现过滤器,防止用户未登录访问的相关文章

利用Django中间件middleware解决用户未登录问题(转)

add by zhj: Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middleware,template_response_middleware,response_middleware,Django貌似为每种中间件都定义接口,比如request_middleware中间件的接口为process_request(self, request),我们增加新的中间件时,只要实现这些接口就可

用户未登录或Session超时时重定向到登录页,不那么简单

在网站开发中,我们经常有这样的场景出现: 情景1:对未登录的用户或没有权限的用户,当其想访问某个受限网页时,系统要能够自动转到登录页面.   情景2:对于用session保存用户状态的情况还有这样一种需求,当用户的session已超时时,用户再想执行操作时,也要将其转到登录页面.   在asp.net中,要实现上述的功能容易吗?有人会说:"这太容易了,可以通过下面两种方式实现".   方法一:直接调用asp.net中的response.redirect方法实现 response.red

JavaEE之--------利用过滤器实现用户自动登录,安全登录,取消自动登录黑用户禁止登录

在我们生活中,对于账户的自动登录已经很常见了,所以利用过滤器实现这个功能 主要介绍用户的自动登录和取消自动登录,以及实现一天自动登录或者n天实现自动登录,当用户ip被加入到黑名单之后,直接利用过滤器返回一个警告页面. 过滤器的功能很是强大,我们只需要在写好的前台后servlet之后进行添加就可以实现这个功能 Ps:这个仅仅只是一个演示而已,里面的访问数据库的部分,自己随意模拟了下,主要是突出实现自动登录的功能. 前台代码: 前台代码是成功与否都在这个页面显示.用到的技术:jstl标签的应用,se

asp.net mvc 自定义全局过滤器 验证用户是否登录

一般具有用户模块的系统都需要对用户是否登录进行验证,如果用户登录了就可以继续操作,否则退回用户的登录页面 对于这样的需求我们可以通过自定义一个独立的方法来完成验证的操作,但是这样代码的重复率就大大提高了 对于这样的需求,有一个比较好的解决方案,通过自定义一个全局的过滤器来完成这个操作 这里我们需要实现AuthorizeAttribute特性来完成对用户身份的验证 首先给出自定义的类,通过这个类来实现对用户身份的判断,通过重写HandleUnauthorizedRequest函数 来完成用户验证失

Servlet案例6:显示用户的上次访问时间

这里是cookie的简单应用 告诉用户您的上次访问时间是:xxxx-xx-xx xx:xx:xx 思路: 第一次访问该网站时候,记录当前访问时间(new Date()) 把当前时间以cookie的形式写给客户端(response.addCookie) 第二次访问时候,获取客户端携带的相应的cookie,并且显示给用户 覆盖上次访问时间 代码实现: package cookie; import java.io.IOException; import java.text.SimpleDateForm

jsp中用户未登录,防止其他链接访问

方法1:  用session 方法2 :  用filter 方法1:  在处理登录的servlet中写如下语句 //设置session的失效时间单位为 秒 request.getSession().setMaxInactiveInterval(1*60); (还可以在web.xml中写如下语句,设置失效时间.不过前者优先级别高. <session-config> <session-timeout>1</session-timeout> <!-- 单位为分钟 --&

servlet和jsp页面过滤器Filter的作用及配置

刚刚有个朋友问我,Servlet的过滤器有什么作用? 现在发个帖子说明一下,            过滤器是一个对象,可以传输请求或修改响应.它可以在请求到达Servlet/JSP之前对其进行预处理,而且能够在响应离开Servlet /JSP之后对其进行后处理.所以如果你有几个Servlet/JSP需要执行同样的数据转换或页面处理的话,你就可以写一个过滤器类,然后在部署描述文 件(web.xml)中把该过滤器与对应的Servlet/JSP联系起来.你可以一个过滤器以作用于一个或一组servlet

MVC 过滤器 构建会员是否登录

使用环境:在后台管理或者前台有会员中心的情况下使用 使用方式:这是一个用户中心的控制器 我给用户中心主页增加一个特性 [AccountFilter]这是一个过滤器的名字 public class AccountController : Controller { [AccountFilter] public ActionResult Index() { return View(); } } 过滤器具体代码如下 namespace FytMsys.Helper { /// <summary> //

vue路由跳转时判断用户是否登录功能

通过判断该用户是否登录过,如果没有登录则跳转到login登录路由,如果登录则正常跳转. 一丶首先在用户登录前后分别给出一个状态来标识此用户是否登录(建议用vuex): 简单用vuex表示一下,不会可以自己去官网多看看: import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); var state = { isLogin:0, //初始时候给一个 isLogin=0 表示用户未登录 }; const mutations = { cha