zoukankan      html  css  js  c++  java
  • Strust2拦截器

    Struts拦截器

    filter:对所有的东西都过滤。.css,.js,.jpg。
    interceptor:对action拦截。struts工具。

    一、拦截器配置。
    第一步:创建一个类,让其继承自AbstractInterceptor
    第二步:配置struts.xml
    1.添加<interceptors>配置节,添加拦截器配置。
    2.在action中引用,<interceptors>中的配置。

    注意:
    1.在action中需要添加defaultStack引用
    2.在建<interceptors>可以建立stack,把defaultStack也添加在里面,在引用的时候引用此stack即可。

    二、在拦截器中使用内置对象。
    1.ActionContext 获取Map.
    2.ServletActionContext 获取HttpSession
    3.实现SessionAware接口


    三、使用拦截器实现登录身份验证。

    有两个action是不能拦截。打回登录界面action,登录提交验证并写 session的action
    在登录验证的auth方法中,分两种情况:
    1.第一次登录验证。此时,session中没有信息,需要向session中添加登录信息
    2.非第一次登录验证。此时,session中有信息,不需要再入session中添加信息

    验证 autentication

    授权 authorization

    首先做个action:

    package com.itnba.maya.controller;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.struts2.interceptor.SessionAware;
    
    import com.itnba.maya.DAO.User;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class LoginAction extends ActionSupport implements ModelDriven<User>,SessionAware{
    	private Map<String, Object> session = new HashMap<String, Object>();
    	public Map<String, Object> getSession() {
    		return session;
    	}
    	private User user = new User();
    	public User getUser() {
    		return user;
    	}
    	public void setUser(User user) {
    		this.user = user;
    	}
    	public String login(){
    		return SUCCESS;
    	}
    	public String auth(){
    		List<String> uid = new ArrayList<String>();    //模拟从数据库接收数据
    		uid.add("zhangsan");
    		uid.add("lisi");
    		uid.add("wangwu");
    		uid.add("zhaoliu");
    		Object obj = session.get("user");                    
    		if(obj == null){           //判断是不是第一次进login
    			if(uid.contains(user.getUsername())){  //判断输入的账号是不是已注册的账号
    				session.put("user", user.getUsername());
    				return SUCCESS;
    			}
    			else{
    				return "login_error";
    			}
    		}
    		else{
    			return SUCCESS;
    		}
    	}
    	
    	@Override
    	public User getModel() {
    		
    		return user;
    	}
    	@Override
    	public void setSession(Map<String, Object> arg0) {
    		this.session = arg0;
    		
    	}
    }
    

    然后在做一个拦截器:

    package com.itnba.maya.util;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.struts2.interceptor.SessionAware;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    
    public class MyIntreceptor extends AbstractInterceptor{
    	private Map<String, Object> session;
    	@Override
    	public String intercept(ActionInvocation arg0) throws Exception  {
    		
    		System.out.println("intercept is running");
    		session = ActionContext.getContext().getSession();
    		if(session.get("user") == null){
    			return "login_error";
    		}
    		return arg0.invoke(); //继续往下走
    	}
    
    }
    

    配置strust2.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>
    
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="true" />
    	<constant name="struts.ui.theme" value="simple"></constant>
        <package name="default" namespace="/" extends="struts-default">
    		<interceptors>
    			<interceptor name="myinterceptor" class="com.itnba.maya.util.MyIntreceptor"></interceptor>
    			<interceptor-stack name="myStack">
    				<interceptor-ref name="myinterceptor"></interceptor-ref>
    				<interceptor-ref name="defaultStack"></interceptor-ref>
    			</interceptor-stack>
    		</interceptors>
    		
    	<action name="Login_login" class="com.itnba.maya.controller.LoginAction" method="login">     //这是给登录界面
                <result>
                    /Login/login.jsp
                </result>
            </action>
            <action name="Login_auth" class="com.itnba.maya.controller.LoginAction" method="auth">        //这是登录之后的结果界面
                <result>
                    /Login/auth.jsp
                </result>
                <result name="login_error">
                	/Login/login.jsp
                </result>
            </action>
            <action name="*_*" class="com.itnba.maya.controller.{1}Action" method="{2}">          //这是拦截其他的页面
                <interceptor-ref name="myStack"></interceptor-ref>
                <result>
                    /{1}/{2}.jsp
                </result>
                <result name="login_error">
                	/Login/login.jsp
                </result>
            </action>
            
        </package>
    </struts>
    

    这样就实现了对登录的拦截

  • 相关阅读:
    vue ERROR:in ./sc/styles/index.scss and 4058
    vue cli 报错4048 解决方法
    原型 与 原型链
    Node.js的简介与历史
    javascript实现表单提交加密
    javaScript的关键字与保留字
    luogu P4422 题解
    【笔记】博弈论
    5.11 考试解题报告
    【P4370】[Code+#4]组合数问题2
  • 原文地址:https://www.cnblogs.com/dnf1612/p/6580407.html
Copyright © 2011-2022 走看看