欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java web过滤器验证登录防止未登录进入界面

程序员文章站 2024-03-13 21:12:40
今天用ssh2写了个简单的系统,发现了一个问题,我这系统必须先登录成功才能进入主页,但我在浏览器里直接输入主页地址,发现也能进入,这个肯定不好,毫无安全性可言,后经查资料发...

今天用ssh2写了个简单的系统,发现了一个问题,我这系统必须先登录成功才能进入主页,但我在浏览器里直接输入主页地址,发现也能进入,这个肯定不好,毫无安全性可言,后经查资料发现需要登录过滤器,就试了下,发现果然可以避免未经登录即可进入主页的危险,下面是我整理出的详细步骤:

1.首先写一个权限过滤filter类,实现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 init(filterconfig filterconfig) throws servletexception {
  // todo auto-generated method stub
 }
 @override
 public void dofilter(servletrequest request, servletresponse response,
   filterchain chain) throws ioexception, servletexception {
  // 获得在下面代码中要用的request,response,session对象
  httpservletrequest servletrequest = (httpservletrequest) request;
  httpservletresponse servletresponse = (httpservletresponse) response;
  httpsession session = servletrequest.getsession();
  // 获得用户请求的uri
  string path = servletrequest.getrequesturi();
  //system.out.println(path);
  // 从session里取员工工号信息
  string empid = (string) session.getattribute("empid");
  /*创建类constants.java,里面写的是无需过滤的页面
  for (int i = 0; i < constants.nofilter_pages.length; i++) {
   if (path.indexof(constants.nofilter_pages[i]) > -1) {
    chain.dofilter(servletrequest, servletresponse);
    return;
   }
  }*/
  // 登陆页面无需过滤
  if(path.indexof("/login.jsp") > -1) {
   chain.dofilter(servletrequest, servletresponse);
   return;
  }
  // 判断如果没有取到员工信息,就跳转到登陆页面
  if (empid == null || "".equals(empid)) {
   // 跳转到登陆页面
   servletresponse.sendredirect("/jingxing_oa/login.jsp");
  } else {
   // 已经登陆,继续此次请求
   chain.dofilter(request, response);
  }
 }
 @override
 public void destroy() {
  // todo auto-generated method stub
 }
}

2.然后在web.xml里配置需要登陆权限验证的jsp文件:

  a.如果是某个具体的jsp文件(如a.jsp)需要登陆验证

<!-- 配置登陆过滤器 -->
<filter>
  <filter-name>login</filter-name>
  <filter-class>com.jingxing.oa.filter.loginfilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>login</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

b.如果是某一个目录(如a/目录)整个目录下的文件都需要登陆验证:

<!-- 配置登陆过滤器 -->
 <filter>
  <filter-name>login</filter-name>
  <filter-class>com.jingxing.oa.filter.loginfilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>login</filter-name>
  <url-pattern>/a/*</url-pattern>
 </filter-mapping>

以上所述是小编给大家介绍的java web过滤器验证登录防止未登录进入界面,希望对大家有所帮助