• JavaWeb -- Struts 自定义拦截器, 登录权限拦截


    1. 自定义拦截器, 登录权限拦截

    login.jsp 登录JSP

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    	<head>
    		<title>login.jsp</title>
    	</head>
    	<body>
    		<s:form action="LoginAction_reg" name="login">
    			<s:textfield name="name" label="UserName" />
    			<s:submit />
    		</s:form>
    	</body>
    </html>

    LoginAction.java 登录处理action

    /**
     * 登录action
     */
    public class LoginAction extends ActionSupport implements SessionAware{
    	private static final long serialVersionUID = -6933309304624396640L;
    
    	public String name;
    
    	/* 接受session中的map */
    	private Map<String, Object> sessionMap;
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String reg() {
    		if("tom".equals(name)){
    			//存放登录信息
    			sessionMap.put("username", name);
    		}
    		else{
    			//回到登录页面
    			return LOGIN ;
    		}
    		return "success";
    	}
    
    	public String toLoginView() {
    		System.out.println("toRegView");
    		return "loginView";
    	}
    
    	/**
    	 * 注入session map
    	 */
    	public void setSession(Map<String, Object> session) {
    		this.sessionMap = session ;
    	}
    }
    

    LoginInterceptor.java 拦截器

    /**
     * 登录拦截器
     */
    public class LoginInterceptor implements Interceptor {
    	private static final long serialVersionUID = 286019271181543787L;
    
    	public void destroy() {
    	}
    
    	public void init() {
    	}
    
    	public String intercept(ActionInvocation invocation) throws Exception {
    		Object action = invocation.getAction();
    		//如果是达到登录或者注册的action,则直接放行
    		if(action instanceof LoginAction || action instanceof RegAction){
    			return invocation.invoke();
    		}
    		
    		Map<String, Object> sessionMap = invocation.getInvocationContext().getSession();
    		//如果没有登录
    		if(sessionMap.get("username") == null){
    			return "login" ;
    		}
    		//放行
    		else{
    			return invocation.invoke();
    		}
    	}
    }

    login.xml ,action interceptor 注册配置, 需要加到struts.xml (include)

    <?xml version="1.0"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
        "http://struts.apache.org/dtds/struts-2.1.7.dtd">
    <struts>
        <package name="LoginPkg" namespace="/login" extends="struts-default">
            <interceptors>
                <!-- 注册拦截器 -->
                <interceptor name="loginInterceptor" class="cn.itcast.struts2.interceptor.LoginInterceptor" />
                
                <!-- 自定义拦截器栈 -->
                <interceptor-stack name="loginStack">
                    <interceptor-ref name="loginInterceptor" />
                    <interceptor-ref name="defaultStack" />
                </interceptor-stack>
            </interceptors>
            <!-- 定义默认栈 -->
            <default-interceptor-ref name="loginStack" />
            
            <!-- 定义全局结果 -->
            <global-results>
                <result name="login">/login.jsp</result>
            </global-results>
            
            <!-- 注册登录action -->
            <action name="LoginAction_*" class="cn.itcast.struts2.interceptor.LoginAction" method="{1}">
                <result name="success">/success.jsp</result>
                <result name="loginView">/login.jsp</result>
            </action>
        </package>
    </struts>


     


  • 相关阅读:
    centos5&6的启动过程
    linux之目录知识
    js动画
    js操作高级
    js操作
    JS基础
    跨域问题
    MySQL存储引擎
    MySQL索引管理
    MySQL操作命令
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648026.html
Copyright © 2020-2023  润新知