struts学习-使用拦截器控制登陆权限拦截

jsp:

简单的一个登陆页面。

<%--
  Created by IntelliJ IDEA.
  User: bin
  Date: 2020-07-02
  Time: 13:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"  %>

<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="login.action" method="post">
    账号:<input name="user.name" type="text"><br>
    密码:<input name="user.password" type="text"><br>
    <input type="submit" value="注册">

</form>
</body>
</html>

登陆成功后才能访问的页面。就是测试能不能访问的。

<html>
<body>
<h2>shout!</h2>
</body>
</html>

登陆成功的页面,一样时测试的。

<%@page isELIgnored="false" pageEncoding="UTF-8" %>


<html>
<body>
<h2>bins
    !</h2>
欢迎回来${user.name}
</body>
</html>

action:

登陆的逻辑方法,简单的判断

package com.bin.action;

import com.bin.entity.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;

import java.util.Map;

public class LoginAction extends ActionSupport {
    public User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String login(){
        System.out.println("进来了");
        if ("bin".equals(user.getName())&&"bin".equals(user.getPassword())){

            System.out.println("登陆成功");
            Map<String, Object> sessionMap = ActionContext.getContext().getSession();
            sessionMap.put("user",user);
            return SUCCESS;
        }else {

            return ERROR;
        }
    }

    public  String registr(){
        return  SUCCESS;
    }
    public  String sss(){
        return  SUCCESS;
    }

}

Interceptor:

自定义的拦截器

package com.bin.interceptor;


import com.bin.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.interceptor.Interceptor;

import java.util.Map;

public class myInterceptor implements Interceptor {


    @Override
    public void destroy() {

    }

    @Override
    public void init() {

    }

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {

        //得到当前拦截的的目标Action代理对象(那个action请求来访问就获取这个action的代理对象。就好像给这个对象起个别名)
        ActionProxy proxy = invocation.getProxy();
        得到当前执行的action的方法,action请求中的执行方法。
        String proxyMethod = proxy.getMethod();
        //简单的判断,这个是不拦截的方法,类似于登陆,注册之类的
        if ("login".equals(proxyMethod)||"registr".equals(proxyMethod)){
            //这就话就是放行
            invocation.invoke();
        }

        //获取session域中的数据
        Map<String, Object> sessionMap = ActionContext.getContext().getSession();
        User user = (User) sessionMap.get("user");
        if (user==null){
            //判断是否存在,不存在就跳转回登陆页面
            return "login";
        }else {
            //方形
            return invocation.invoke();

        }

    }
}

user:

别忘了创建实体类了

package com.bin.entity;

public class User {
    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

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

    @Override
    public String toString() {
        return "user{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

struts.xml:

最重点的来的,xml的配置文件。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!--自己定义的默认包,继承struts2中默认额拦截器包中的18个拦截器,同时还使用了自己定义的拦截器 -->
    <package name="myDefault" extends="struts-default" abstract="true">
        <!--定义拦截器 -->
        <interceptors>
            <!--自己定义的拦截器,在这里配置到xml文件中-->
            <interceptor name="myInterceptor" class="com.bin.interceptor.myInterceptor"></interceptor>
            <!--拦截器栈,定义自己的拦截器栈,里面注入的是struts2默认的拦截器和我们自己写的拦截器-->
            <interceptor-stack name="myStack">
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="myInterceptor"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <!--这是在全局使用的我们的拦截器栈-->
        <default-interceptor-ref name="myStack"></default-interceptor-ref>
    </package>

    <package name="default" extends="myDefault" namespace="/">

        <!--定义的全局变量,只要是返回值为login的,都走这个result-->
        <global-results>
            <result name="login">/logini.jsp</result>
        </global-results>
        <!--登陆action的配置-->
        <action name="login" class="com.bin.action.LoginAction" method="login">
            <result name="success">/WEB-INF/jsp/bins.jsp</result>
            <result name="error">/index.jsp</result>
        </action>

        <!--这个是登陆之后才能访问的-->
        <action name="bin" class="com.bin.action.LoginAction" method="sss">
            <result name="success">/WEB-INF/jsp/shout.jsp</result>

        </action>




        <!-- 需要权限才能访问的页面-->
        <action name="*">
            <result>/WEB-INF/jsp/*.jsp</result>
        </action>
    </package>
    
</struts>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值