拦截JSP页面,校验是否已登录详解及实现代码_java

拦截JSP页面,校验是否已登录

   最近使用struts2做项目,需要拦截JSP以校验是否已经登,但struts2的过滤器链只能过滤action。后来发现在web.xml里可以直接增加javax.servlet.Filter实现类的过滤器,可以过滤JSP。请看代码

Filter实现类

<span style="font-size:18px;">package com.common; 

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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 

public class LoginFilter extends HttpServlet implements Filter {  

  private static final long serialVersionUID = 1L;  

  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest)request;
    HttpServletResponse res = (HttpServletResponse)response;
    String path = req.getContextPath();
    String indexPath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path+ "/pages/login.jsp";
    if(req.getRequestURI().endsWith("login.jsp"))
    {
      chain.doFilter(request, response);
      return;
    } 

    Object loginuser = req.getSession().getAttribute("<strong><span style="color:#ff0000;">loginSession</span></strong>");
    if(loginuser == null){
      res.sendRedirect(indexPath);
      return;
    }
    chain.doFilter(request, response);
  }  

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

}
</span>

登录方法:


<span style="font-size:18px;"> public String login()
  {
    Login login = new Login(); 

    //.......校验登录信息
    ActionContext ctx = ActionContext.getContext();
    Map<String, Object> session = ctx.getSession();
    session.put("<strong><span style="color:#ff0000;">loginSession</span></strong>", login);
    return "success";
  }</span>

 web.xml配置

<filter>
   <filter-name>setlog</filter-name>
   <filter-class>com.common.LoginFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>setlog</filter-name>
   <url-pattern>/pages/home.jsp</url-pattern>
   <url-pattern>/pages/channel/*</url-pattern>
   <url-pattern>/pages/content/*</url-pattern>
   <url-pattern>/pages/product/*</url-pattern>
   <url-pattern>/pages/vodtask/*</url-pattern>
</filter-mapping> 

注意,如果页面上使用了框架,则可能导致session超时后退出到登录页面,此时登录页面显示在框架的某个子页面,解决方法,在登录页面加入如下代码即可。

<span style="font-size: 18px;">  <script language="javascript">
    if (top != window)
      top.location.href = window.location.href;
  </script></span> 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jsp
校验是否已登录
js权限校验与拦截、拦截器和校验器、spring mvc拦截器详解、struts2拦截器详解、rsa签名 校验 详解,以便于您获取更多的相关知识。

时间: 2024-09-24 05:17:20

拦截JSP页面,校验是否已登录详解及实现代码_java的相关文章

Java 反射机制详解及实例代码_java

Java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 package Reflect; /** * 通过一个对象获得完整的包名和类名 * */ class Demo{ //other codes... } class hello{ public static void main(String[] args) {

Java Lambda 表达式详解及示例代码_java

Java Lambda 表达式是 Java 8 引入的一个新的功能,可以说是模拟函数式编程的一个语法糖,类似于 Javascript 中的闭包,但又有些不同,主要目的是提供一个函数化的语法来简化我们的编码. Lambda 基本语法 Lambda 的基本结构为 (arguments) -> body,有如下几种情况: 参数类型可推导时,不需要指定类型,如 (a) -> System.out.println(a) 当只有一个参数且类型可推导时,不强制写 (), 如 a -> System.o

java 多线程-锁详解及示例代码_java

自 Java 5 开始,java.util.concurrent.locks 包中包含了一些锁的实现,因此你不用去实现自己的锁了.但是你仍然需要去了解怎样使用这些锁. 一个简单的锁 让我们从 java 中的一个同步块开始: public class Counter{ private int count = 0; public int inc(){ synchronized(this){ return ++count; } } } 可以看到在 inc()方法中有一个 synchronized(th

Struts2 $,#,%详解及实例代码_java

最近在学ssh,一直搞不懂$,%,#的区别,做了点小练习,慢慢也懂了一点,将自己所学的也记录下来吧.    存在一下一个实体entity: public class Person { private int id ; private String Name ; public int getId() { return id; } public Person(int id, String name) { super(); this.id = id; Name = name; } public Per

java Arrays类详解及实例代码_java

最近做项目 用到Arrays 类,这里整理下,希望大家能够掌握Arrays . 1.Arrays类概述   针对数组进行操作的工具类.   提供了排序,查找等功能. 2.成员方法   public static String toString(int[] a)   public static void sort(int[] a)   public static int binarySearch(int[] a,int value) package com; import java.util.Ar

java 装饰模式(Decorator Pattern)详解及实例代码_java

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 我们通过下面的实例来演示装饰器模式的使用.其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类. 实现 我们将创建一个 Shape 接口和实现了 Shape 接口的实体类.然后我们创建一个实现了 Shape 接口的抽象装饰类Sha

Java 方法签名详解及实例代码_java

java 方法签名,我想做java 开发的朋友也知道,方法签名的重要性,是方法重载的一个比较好的解释,尤其是在后续优化方面,这里记录下,有看到的朋友也可看下, 方法签名的意义 对于同名不同类.同类不同名的方法,方法签名的意义并不是很大,但是对于重载方法来说,方法签名的意义就十分巨大了.由于重载方法之间的方法名是相同的,那么我们势必要从构成方法的其他几个要素中找到另一个要素与方法名组成能够唯一标示方法的签名,方法体当然不予考虑.那么就是形参列表和返回值了,但是由于对于调用方法的人来说,方法的形参数

Java 中的注解详解及示例代码_java

在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代码执行. 注解可以做什么 Java中的注解通常扮演以下角色 编译器指令 构建时指令 运行时指令 其中 Java内置了三种编译器指令,本文后面部分会重点介绍 Java注解可以应用在构建时,即当你构建你的项目时.构建过程包括生成源码,编译源码,生成xml文件,打包编译的源码和文件到JAR包等.软件的构建通常使用诸如Apache Ant和Mav

Java transient 关键字详解及实例代码_java

Java transient 关键字 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化. 然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见