jsp实现网站浏览过滤器(没有登录就不能访问其他网页)

在我们制作一个网站项目,或是一个系统的时候,假如我们没有对这个系统做一些过滤的时候,我们只要记住这个网站里面的一些服务的网址,直接在浏览器里面输入这个网址就能访问这个访问了,那么登录功能还有什么用呢???还有的是有些服务可能要vip才能用的,没有一些浏览的过滤。没有登录就访问网站其他页面,网站的服务,网站系统就会很乱,很不安全。大家都能进,不合逻辑。


在jsp解决这个问题,用session。  一般用户登陆信息都存在session中。


我有2种解决方式

(1)如果需要登陆验证才能访问的页面少的话可以通过include文件方式。

把下面代码保存文件名字为checksession.jsp

<%@ page language="java" contentType="text/html;charset=GBK"

   pageEncoding="GBK"%>

<%

if(session.getAttribute("userinfo")==null){//用户没有登陆


response.sendRedirect("/login.jsp");//把需要登陆才能访问的页面中包含这个文件。

}

%>



(2)如果需要登陆验证的页面多的话建议采用filter.

先在src目录下创建一个包名为com.filter,然后在这个包里面创建一个名为TestFilter的java文件或是一个servlet文件,代码如下

TestFilter.java

package com.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 TestFilter implements Filter {

public void destroy() {
 //过滤器销毁,一般是释放资源
}
/**
 * 某些url需要登陆才能访问(session验证过滤器)
 */
public void doFilter(ServletRequest arg0, ServletResponse arg1,
  FilterChain arg2) throws IOException, ServletException {
 HttpServletRequest request=(HttpServletRequest)arg0;
 HttpServletResponse response=(HttpServletResponse)arg1;
 HttpSession session=request.getSession();
 //userinfo,需要通过login.jsp 登陆后向session中写入用户信息,标示用户已经登陆
 if(session.getAttribute("user")==null){
  String errors = "对不起,你还没有登录,请先登陆,再访问此服务!";
  request.setAttribute("errors", errors);
  request.getRequestDispatcher("/errors/error.jsp").forward(request, response);//跳转到处理页面
 }else{
  arg2.doFilter(request, response);
 }
}
public void init(FilterConfig arg0) throws ServletException {
          //初始化操作,读取web.xml中过滤器配置的初始化参数,满足你提的要求不用此方法
}
}

 

然后在webroot,先创建一个errors的文件夹,用于存储错误处理页面。然后里面创建一个error.jsp的文件用作这个未登陆就访问页面的错误处理页面

error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"  isErrorPage="true"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'error.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->


  </head>
  
  <body>
    <%
    String error = (String)request.getAttribute("errors");
    if(error!=null){
    out.print("<h2>"+error+"</h2>");
    out.print("<p>");
    out.print("<a href='dl.jsp' target='_parent'>前往登录</a>&nbsp;&nbsp;");
    out.print("<a href='HRC/zhuce.jsp' target='_parent'>前往注册</a>");
    }
     %>
  </body>
</html>


然后在webRoot目录下找到,web.xml文件,然后进行全局配置

Web.xml

/*

 *TestFilter 在web.xml中配置说明

 *

 *<filter>

 *  <filter-name>TestFilter</filter-name>

 *  <filter-class>com.filter.TestFilter</filter-class>

 *</filter>

 *配置需要经过login.jsp登陆过才能访问的区域

 *目前配置方式仅仅是在用户访问product.jsp的时候才走过滤器,可以配置/*,/user/*等

*。单个文件的配置

 *<filter-mapping>

 *  <filter-name>TestFilter</filter-name>

 *  <url-pattern>/product.jsp</url-pattern>

 *</filter-mapping>

*文件夹的配置

* <filter-mapping>

 *  <filter-name>TestFilter</filter-name>

 *  <url-pattern>/user/*</url-pattern>

 *</filter-mapping>

* <filter-mapping>

*所有jsp文件

 *  <filter-name>TestFilter</filter-name>

 *  <url-pattern>/ *.jsp</url-pattern>

 *</filter-mapping>


下面提供效果图


  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP(JavaServer Pages)和Servlet是JavaWeb开发中的两个重要组件,它们的扩展可以让JavaWeb应用程序更加灵活和强大。以下是一些常见的JSP和Servlet扩展: 1. 自定义标签库:JSP中的标签库可以让开发者定义自己的标签,从而更好地封装业务逻辑。开发者可以使用Java语言编写自己的标签库,也可以使用第三方标签库,比如JSTL、Struts Taglib等。 2. 过滤器:Servlet中的过滤器可以让开发者在请求被Servlet处理之前或之后进行一些额外的处理,比如对请求进行一些安全性检查、对响应进行一些压缩等。开发者可以编写自己的过滤器,也可以使用第三方过滤器,比如Spring Security、Shiro等。 3. Servlet容器:Servlet容器可以让开发者更好地管理Servlet的生命周期和资源,同时也可以提供一些额外的功能,比如负载均衡、集群管理等。常见的Servlet容器有Tomcat、Jetty等。 4. WebSocket:WebSocket是一种基于TCP的通信协议,它可以让客户端和服务器之间实现实时的双向通信。Servlet可以通过实现WebSocket接口来支持WebSocket协议。 5. RESTful API:Servlet可以通过实现RESTful API来提供Web服务,这种方式可以让客户端更加方便地使用Web服务,并且可以支持多种客户端类型,比如浏览器、移动设备等。 总之,JSP和Servlet都有很多扩展方式,可以让JavaWeb应用程序更加灵活和强大。开发者可以根据具体的需求来选择适合自己的扩展方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值