zoukankan      html  css  js  c++  java
  • Struts2拦截器配置(简单的登陆后的权限验证)

     

    简单登陆后的权限验证

    1.UserAction

    public String login(){
            //为防止用户重复提交同一请求(当直接在地址栏输入请求时,)
            session=context.getSession();//首先获取session
            User userSession=(User)session.get("user");        
            if(userSession==null){//如果没有获取到session,return SUCCESS;
                
                if(user!=null){//继续判断,用户是否传递了参数
                    
                    if(new UserDao().login(user)){//继续判断,如果用户名密码正确                    
                        session.put("user", user);//将用户信息放到session中
                        return SUCCESS;
                    }else{
                        error="用户名或密码错误";//如果用户名不正确,显示一下错误信息,
                        return "error";
                    }
                    
                }else{
                    error="用户名或密码错误";//没有传递参数,在界面显示一下错误信息,
                    return "error";
                }
                
            }else{
                return SUCCESS;//如果获取到session,return SUCCESS;
            }        
        }

    2.Struts.xml中拦截器的配置信息

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        
        <constant name="struts.enable.DynamicMethodInvocation" value="false" /><!-- 动态方法激发,默认是false -->
        <constant name="struts.devMode" value="true" /><!-- 跟踪,生成很多调试信息,开发时写为true -->
        
        <package name="default" extends="struts-default">
        
            <!-- 用户登录拦截器配置 -->
            <!-- 定义一个拦截器 -->
            <interceptors>
                <!-- 拦截器位置(自定义的拦截器类) -->
                <interceptor name="userInterceptor" class="com.maya.interceptor.UserInterceptor"></interceptor>
                
                <!-- 为方便自定义的拦截器栈(我们可以把自定义的多个拦截器,放到这里面,然后直接调用该拦截器栈即可) -->
                <interceptor-stack name="myStack">
                    <interceptor-ref name="userInterceptor"></interceptor-ref>
                    <interceptor-ref name="defaultStack"></interceptor-ref>
                </interceptor-stack>
            </interceptors>
            <!--
                 使当前包的所有请求,都会被拦截器拦截,当然有些公共页面是不需要拦截的,所以就在其中加上 
                 <interceptor-ref name="defaultStack"></interceptor-ref>
            -->
            <default-interceptor-ref name="myStack"></default-interceptor-ref>
            
            <!-- result全局配置错误页面,一般每个action都是需要一个错误界面的  -->
            <global-results>
                <result name="error">error.jsp</result>
            </global-results><!-- 用户的登陆请求 -->
            <action name="User_login" class="com.maya.interceptor.UserAction" method="login">
                <result name="success" type="redirectAction">
                    <param name="actionName">Info_findall</param>
                </result>
                <result name="error">User_login.jsp</result>
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <!-- 排除当前请求受到拦截器的影响 -->
            </action>
        </package>   
    </struts>

    3.拦截器

    package com.maya.interceptor;
    
    import java.util.Map;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    public class UserInterceptor implements Interceptor {除了实现Iterceptor接口外,我们还可以继承AbstractInterceptor这个类,实现其中的intercept(ActionInvocation invocation)方法即可 
    
        @Override
        public void destroy() {
            //销毁方法
        }
    
        @Override
        public void init() {
            //初始化方法
        }
    
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
            ActionContext context=invocation.getInvocationContext();//获取Context上下文
            Map<String, Object> session=context.getSession();//获取session
            User user=(User)session.get("user");//判断是否登陆
            String result=null;
            if(user==null){
                result="error";
            }else{
                result=invocation.invoke();//如果登陆了,就继续往下执行
            }
            return result;
        }
    }
  • 相关阅读:
    JQuery之动画效果
    JS (随着鼠标的移动,旁边显示放大图)
    jQuery 事件和动画
    jQuery 概述
    CSS (层叠样式表)
    css的文章部分的基本语句
    HTML基本语法
    Web
    JavaScript预解析案例,JavaScript预解析题目
    JavaScript预解析 变量提升与函数提升
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6549334.html
Copyright © 2011-2022 走看看