`
ren2881971
  • 浏览: 109993 次
社区版块
存档分类
最新评论

Filter过滤,未登录的用户页面跳转

    博客分类:
  • j2ee
 
阅读更多
package com.dog.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class OnlineFilter extends HttpServlet implements Filter {

	private static final long serialVersionUID = 1L;

	@Override
	public void destroy() {
		System.out.println("OnlineFilter destroy>>>>>>>>>>>>>>>>>>");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
	
		/*RequestDispatcher dispatcher = request
				.getRequestDispatcher("../index.jsp");*/
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
	    String path = req.getContextPath();
	    String basePath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path;
		HttpSession session = req.getSession(true);
		String username = (String) session.getAttribute("username");
 		if (username == null || "".equals(username)) {
			
			resp.setHeader("Cache-Control", "no-store");
			resp.setDateHeader("Expires", 0);
			resp.setHeader("Prama", "no-cache");
			resp.sendRedirect(basePath+"/index.jsp");
		} else {
			chain.doFilter(req, resp);
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("OnlineFilter init>>>>>>>>>>>>>>>>>");
	}

}


package com.dog.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class OnlineFilter extends HttpServlet implements Filter {

	private static final long serialVersionUID = 1L;

	@Override
	public void destroy() {
		System.out.println("OnlineFilter destroy>>>>>>>>>>>>>>>>>>");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
	
		/*RequestDispatcher dispatcher = request
				.getRequestDispatcher("../index.jsp");*/
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
	    String path = req.getContextPath();
	    String basePath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path;
		HttpSession session = req.getSession(true);
		String username = (String) session.getAttribute("username");
 		if (username == null || "".equals(username)) {
			
			resp.setHeader("Cache-Control", "no-store");
			resp.setDateHeader("Expires", 0);
			resp.setHeader("Prama", "no-cache");
			resp.sendRedirect(basePath+"/index.jsp");
		} else {
			chain.doFilter(req, resp);
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("OnlineFilter init>>>>>>>>>>>>>>>>>");
	}

}


<filter>
	 	<filter-name>OnlineFilter</filter-name>
	 	<filter-class>com.dog.filter.OnlineFilter</filter-class>
	 </filter>
	 <filter-mapping>
	 	<filter-name>OnlineFilter</filter-name>
	 	<url-pattern>/main/*</url-pattern>
	 </filter-mapping>

上午在完成这部分功能的时候遇到一个问题。Filter过滤的太多了。点击提交按钮,不是先提交到action.而是先提交到filter。 这样filter的session就取不到值,无论填写什么信息都会因为session是null而跳转到index.jsp产生循环跳转的问题。
解决方法就是 将登录过滤的filter的url加上路径,然后将需要过滤的页面放到相应的文件夹下,这样就能过滤指定的url地址啦。 访问index.jsp的时候就不会过滤。 不错。 又解决了一个问问。慢慢来。切莫浮躁。
分享到:
评论

相关推荐

    ajax重写方法搭配后台filter返回status实现ajax请求跳转登录页面

    但在需要用户登录的场景下,服务器可能会返回一个非200的状态码,比如401(未经授权)或403(禁止访问)。这时,我们可以监听这些特定的状态码并做出相应的响应,例如跳转到登录页面。 ```javascript $.ajax({ url...

    Java SpringBoot实现的过滤器(和拦截器)控制登录页面跳转

    本项目主要关注的是如何使用过滤器(Filter)和拦截器(Interceptor)来实现登录页面的控制与跳转。以下是对这些知识点的详细说明: 1. **SpringBoot**: SpringBoot是Spring框架的一个子项目,旨在简化Spring应用...

    Javaweb 登录页面自动跳转

    如果用户未登录,过滤器可以重定向到登录页面;如果已登录,则允许请求继续。 6. **Spring Security**:对于更复杂的认证和授权管理,可以使用Spring Security框架。它提供了全面的安全解决方案,包括登录、注销、...

    过滤器验证用户是否已经登录

    在 doFilter() 方法中,首先获取 HttpSession 对象,然后判断用户是否登录,如果用户没有登录,则弹出提示信息并跳转到用户登录页面。 知识点5: 在 web.xml 中配置 Servlet 过滤器 在编写完 Servlet 过滤器后,...

    servlet 过滤器做的简单登陆demo

    - 可能还包含登录页面的跳转逻辑,如果用户未登录,重定向到登录页面。 5. **web.xml配置**: 配置文件中会定义过滤器的`&lt;filter&gt;`和`&lt;filter-mapping&gt;`元素,指明过滤器类及其需要拦截的URL模式。例如,所有需要...

    用filter实现验证登录

    如果用户未登录,我们可以设置响应头或重定向到登录页面;如果已登录,我们允许请求继续传递。 ```java @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) ...

    play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面

    在Play for Scala框架中,实现SessionFilter的主要目的是为了确保只有已登录的用户才能访问特定的受保护页面,而未登录的用户会被重定向到登录页面。以下是对标题和描述中涉及知识点的详细解释: 1. **Scala编程...

    15_尚硅谷_Filter过滤器_王振国 - 课堂笔记1

    Filter 过滤器的工作流程图是这样的:首先,用户发送请求,Filter 过滤器拦截请求,然后判断用户是否登录,如果没有登录,则跳转到登录页面,如果已经登录,则让程序继续往下访问用户的目标资源。 在实现 Filter ...

    安卓页面跳转的源代码

    在安卓应用开发中,页面跳转是至关重要的一个环节,它允许用户在不同的界面之间自由切换,实现应用的功能导航。本教程将深入讲解如何利用Intent组件来实现在Android应用程序中的页面跳转。Intent在Android中扮演着...

    过滤器,初始时让用户转到登录页面

    本文将详细探讨如何通过过滤器实现在用户未登录的情况下跳转至登录页面的功能。 #### 二、过滤器的基本概念 在Java Web应用程序中,过滤器是一个实现了`javax.servlet.Filter`接口的类,它可以对用户的HTTP请求和...

    servlet实现未登录返回主页

    2. **配置Filter**:在`web.xml`文件中,我们需要配置这个Filter,指定哪些URL需要被过滤,以及当用户未登录时应该重定向到哪个URL。例如,我们可以将所有以"/private/"开头的URL标记为需要过滤的路径,并将主页URL...

    Filter过滤器的概念和使用

    通过分析Cookie中的信息,可以判断用户是否已经登录过,并直接跳转到相应的页面。 ```java public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ...

    ext异步跳转问题(解决过滤器的问题)

    然而,当涉及到页面跳转(例如,登录验证失败或者权限控制)时,问题就可能出现。由于异步请求的特性,如果简单地在回调函数中使用`window.location.href`进行跳转,可能会导致用户界面的不一致,因为页面可能在数据...

    利用java filter 实现业务异常拦截源码

    利用java filter 实现业务异常拦截 跳转到错误信息提示页面 我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理...

    使用Shiro实现登录成功后跳转到之前的页面

    正确配置 Shiro 的过滤器链定义,确保只有需要认证的URL会被保存,这样才能在用户登录后跳转到他们最初尝试访问的页面。在实际应用中,根据项目的具体需求,可以结合这两种方法,以提供更优质的用户体验。

    详解Struts2中对未登录jsp页面实现拦截功能

    总之,通过使用Servlet Filter技术,我们可以对未登录用户的JSP页面访问进行有效控制,避免了非法用户绕过登录页面直接访问系统其他页面的风险。这种做法不仅增强了系统的安全性,也提升了用户体验,因为它确保了...

    tomcat、struts2、servlet Filter(过滤器) 工作原理

    Action执行完成后,返回一个Result,该Result定义了如何展示结果,可能是跳转到一个新的JSP页面,或者返回JSON数据等。 Servlet Filter(过滤器)是Servlet API的一部分,它允许开发者在请求被Servlet处理之前或...

    Session过期后自动跳转到登录页面的实例代码

    当用户登录后,服务器会创建一个Session,并将用户的登录信息存储在其中。然而,Session不能永久保持,它有默认的超时时间,超过这个时间如果没有接收到客户端的任何请求,Session就会被视为过期。在本文中,我们将...

    过滤器详细讲解及代码

    以下是一个简单的过滤器实现示例,用于检查用户是否登录,如果未登录,则重定向到登录页面。 #### 过滤逻辑 代码片段展示了过滤器如何检查用户是否已经登录,如果没有登录,将重定向到特定的Servlet进行处理,否则...

    intent页面跳转

    7. **意图过滤器**:对于隐式Intent,我们需要在AndroidManifest.xml中为Activity定义意图过滤器(Intent Filter),声明Activity能响应的Action、Data、Category等,以便系统能正确匹配并启动目标Activity。...

Global site tag (gtag.js) - Google Analytics