Struts2 拦截是否登录过

一、前言
我们做一个信息管理系统,为了保证信息的安全,不被其他人员看到内部的信息,我们一般都会设计一个用户的登录界面,但是仅仅通过登录界面,输入符合要求的用户名和密码,网页帮你跳转到内部页面是没有意义的,因为其他人员一旦知道你内部的链接,他们就可以直接地通过内部的链接,直接进入你的信息管理系统。在JavaWeb中,我们一般设计一个Filter 拦截器,让内部连接都要经历 Filter 来检验是否登录过(登录成功时session.setAttribute,检验时session.getAttribute),也不是很难。

【注意:这里只是使其他人无法进入操作界面而已,而如果别人知道你界面的操作的请求 url 链接,不用进入界面,依旧可以对数据库进行修改,好比一个人失去了 windows 操作,但可以使用 linux 来操作,可以使用 shiro 等安全框架解决】

但以后整合 SSH 框架的时候,就应使用struts2来实现了,也会比较JavaWeb更容易理解,更加简单了,下面笔者用心使用 struts2 来演示一个简单的拦截是否登录过才能进入内部页面的例子。
绝对是最简单最详细最实用的教程,也可以去看我资源里边下载源代码!
可以说是之前一篇登录界面设计的加强版,
议新手先看看基础版,有了结构再来看看加强版的,才容易理解,以便以后应用于项目开发
http://blog.csdn.net/larger5/article/details/78380732

二、先功能演示(下面有附有详细的代码和解析)

①主界面index.jsp,其中的add链接,为模拟进入内部页面的链接,
这里写图片描述

②现在点击add链接(真正的项目是有很多链接要被检验的,这里为了演示就一个罢了),进入unlogin.jsp页面,说明进不了了,为了更清除拦截的原理,我把拦截的相关信息打印到console上。
这里写图片描述

控制台输出

这里写图片描述
记得去查看下面
System.out.println(“未能通过拦截”);
的位置,以及它的”上下文”,明白流程!

③返回登录页面,
这里写图片描述
先输入错误的帐号,点击登录,就会进入如下页面fail.jsp,提示登录失败
这里写图片描述
现在输入正确的 账户和密码(一般通过数据库来获取,这里为了演示直接限定了为名larger5,密码123,),点击登录

这里写图片描述

就会进入如下success.jsp页面
这里写图片描述

查看console的输出信息(注意第一条是刚刚直接点击链接输出的,第二条是登录成功后输出的)
这里写图片描述

④现在返回登录界面,
这里写图片描述
直接点击内部的链接 add
进入如下logined.jsp提示页面
这里写图片描述
查看console输出,又增加了两新的的提示信息,表示通过拦截才能进去的,而不是平白无故进去的。
每条信息位于那个部位的代码,下面可以查看代码

System.out.println(“通过拦截”);
System.out.println(“成功查看”);

的位置,也是很重要的,你才能清楚,整个流程是怎么回事。
这里写图片描述

三、代码和解释
这里写图片描述
(1)前端代码
① index.jsp 登录界面代码

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <center>
        <s:form action="login.action">
            <s:textfield name="bb.username" label="用户名"></s:textfield>
            <s:password name="bb.password" label="密码"></s:password>
            <s:submit value="登录" />
        </s:form>

        <a href="show.action">add</a>
    </center>
</body>
</html>

②登录成功界面代码 success.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
     <%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h4>用户登录成功!</h4>
    <h1>用户登录信息</h1>
    用户名:<s:property value="#session.username" />
    <br>
    密码:<s:property value="#session.password"/>
    <br>
</body>
</html>

②登录失败界面代码 fail.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h4>用户登录失败!</h4>
</body>
</html>

③登录过界面提示代码 logined.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h4>你已经登录过,可以直接查看内容</h4>
    <h2>查看信息</h2>
</body>
</html>

④没有登陆过界面提示代码 unlogin.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h4>还没有登录,请登录</h4>
</body>
</html>

(2)后台代码
①Action.java

package test;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import test.Bean;

//这是一个Action类
public class Action extends ActionSupport {

    //OGNL
    public Bean getBb() {
        return bb;
    }

    public void setBb(Bean bb) {
        this.bb = bb;
    }

    private Bean bb;

    public String login() throws Exception {
        if (bb.getUsername().equals("larger5") && bb.getPassword().equals("123")) {

            // 下面3条语句就是为了获得session
            ServletRequest request = ServletActionContext.getRequest();
            HttpServletRequest re = (HttpServletRequest) request;
            HttpSession session = re.getSession();

            // 下面登录成功,留下Attribute"痕迹",以后通过这些Attribute"痕迹"来检查是否登录过
            session.setAttribute("username", bb.getUsername());
            session.setAttribute("password", bb.getPassword());
            System.out.println("登录成功,以后可以直接通过内部页面的链接进入内部页面了");

            return "success";
        } else {
            return "fail";
        }
    }
}

②JavaBean.Java

package test;

//一个完整的JavaBean类,用来收集登录账户用户名和密码的信息
public class Bean {

    public Bean(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }

    @Override
    public String toString() {
        return "Bean [username=" + username + ", password=" + password + "]";
    }

    public Bean() {
        super();
        // TODO Auto-generated constructor stub
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    private String username;
    private String password;
}

③Inter.java 拦截器

package test;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class Inter extends AbstractInterceptor {
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {

        // 下面3条语句就是为了获得 session
        ServletRequest request = ServletActionContext.getRequest();
        HttpServletRequest re = (HttpServletRequest) request;
        HttpSession session = re.getSession();

        // 下面检验是否登录过的痕迹
        if (session.getAttribute("username") != null && session.getAttribute("password") != null) {
            System.out.println("通过拦截");
            return arg0.invoke();
        } else {
            System.out.println("未能通过拦截");
            return "fail";
        }
    }
}

④Method.java 要拦截的方法

package test;

import com.opensymphony.xwork2.ActionSupport;

public class Method extends ActionSupport {
    public String show() throws Exception {
        // 模拟是否可以成功进入页面
        System.out.println("成功查看");
        return "success";
    }
}

⑤struts2.xml 配置文件

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <package name="larger5" extends="struts-default">

        <interceptors>
            <interceptor name="checklogin" class="test.Inter"></interceptor>
            <interceptor-stack name="myInter">
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="checklogin"></interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <action name="login" class="test.Action" method="login">
            <result name="success">success.jsp</result>
            <result name="fail">fail.jsp</result>
        </action>

        <action name="show" class="test.Method" method="show">
            <result name="fail">unlogin.jsp</result>
            <result>logined.jsp</result>
            <interceptor-ref name="myInter"></interceptor-ref>
        </action>

    </package>

</struts>  

⑥web.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">

    <!-- 配置 Struts2 的 Filter -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

四、使用 XMind 浏览全局!

这里写图片描述

这里写图片描述

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小村

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值