zoukankan      html  css  js  c++  java
  • struts2_全局的拦截器,拦截用户非法登陆

    struts都是通过action来请求页面的,所以可以通过全局的拦截器来拦截用户的非法登陆,如果用户知道jsp页面的地址,这种情况基本不会出现,那就需要用过滤器对页面进行过滤拦截了.

    这里用拦截器进行拦截.

    firtpart.xml:(设定默认的拦截器,每个Action都会默认调用)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 
     6 <struts>
     7     <package name="test" extends="struts-default" namespace="/test">
     8 
     9         <interceptors>
    10             <interceptor name="loginJudge"
    11                 class="com.sunflower.interceptor.UsrLoginInterceptor">
    12             </interceptor>
    13 
    14             <!-- 自定义拦截器栈 -->
    15             <interceptor-stack name="myDefaultStack">
    16                 <interceptor-ref name="loginJudge"></interceptor-ref>
    17                 <interceptor-ref name="defaultStack"></interceptor-ref>
    18             </interceptor-stack>
    19         </interceptors>
    20 
    21         <!-- 将自定义拦截器栈设置默认的拦截器 -->
    22         <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
    23 
    24         <global-results>
    25     <result name="login" type="redirect">/login.jsp</result>
    26         </global-results>
    27 
    28         <action name="logintest" class="com.sunflower.action.LoginAction">
    29             <result name="success" type="redirectAction">
    30                 <param name="actionName">sayhello</param>
    31                 <param name="namespace">/test</param>
    32                 <param name="username">${username}</param>
    33             </result>
    34         </action>
    35         
    36         <action name="sayhello" class="com.sunflower.action.SayHelloAction">
    37             <result name="success">/welcome.jsp</result>
    38             <result name="login">/login.jsp</result>
    39         </action>
    40     </package>
    41 </struts>

     sturts.xml:(引用firtpart.xml)

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE struts PUBLIC
    3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    4     "http://struts.apache.org/dtds/struts-2.3.dtd">
    5 
    6 
    7 <struts>
    8     <include file="firtpart.xml"></include>
    9 </struts>

    UsrLoginInterceptor.java:(拦截器,对所有Action拦截,除了登陆Action)

     1 package com.sunflower.interceptor;
     2 
     3 import java.util.Map;
     4 
     5 import com.opensymphony.xwork2.Action;
     6 import com.opensymphony.xwork2.ActionInvocation;
     7 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
     8 import com.sunflower.action.LoginAction;
     9 
    10 /**
    11  * 用户拦截器,每个页面都会用到
    12  * 
    13  * @author hanyuan
    14  * @time 2012-6-6 下午12:38:05
    15  */
    16 public class UsrLoginInterceptor extends AbstractInterceptor {
    17 
    18     /**
    19      * 判断用户是否已经登录,如果没有登录,则为非法请求,进行拦截
    20      */
    21     public String intercept(ActionInvocation arg0) throws Exception {
    22         // 判断是否请求为登录界面(login),如果是则不拦截
    23         if (LoginAction.class == arg0.getAction().getClass())
    24             return arg0.invoke();
    25         
    26         
    27         // 如果是请求其他页面,进行拦截
    28         Map map = arg0.getInvocationContext().getSession();
    29         if (null == map.get("username"))
    30             return Action.LOGIN;
    31 
    32         return arg0.invoke();
    33     }
    34 
    35 }

     LoginAction.java:(进行登陆校验)

     1 package com.sunflower.action;
     2 
     3 import java.util.Map;
     4 
     5 import com.opensymphony.xwork2.ActionContext;
     6 import com.opensymphony.xwork2.ActionSupport;
     7 import com.sunflower.util.UserExist;
     8 
     9 public class LoginAction extends ActionSupport {
    10     private String username;
    11     private String password;
    12 
    13     public String getUsername() {
    14         return username;
    15     }
    16 
    17     public void setUsername(String username) {
    18         this.username = username;
    19     }
    20 
    21     public String getPassword() {
    22         return password;
    23     }
    24 
    25     public void setPassword(String password) {
    26         this.password = password;
    27     }
    28 
    29     public String execute() throws Exception {
    30         // 设置session
    31         Map map = ActionContext.getContext().getSession();
    32         // 如果用户存在
    33         if (UserExist.isExist(username, password)) {
    34             if (null == map.get("username"))
    35                 map.put("username", username);
    36             return SUCCESS;
    37         }
    38 
    39         return LOGIN;
    40     }
    41 }

    SayHelloAction.java:(转向欢迎界面的action)

     1 package com.sunflower.action;
     2 
     3 import com.opensymphony.xwork2.ActionSupport;
     4 
     5 public class SayHelloAction extends ActionSupport {
     6     String username;
     7 
     8     public String getUsername() {
     9         return username;
    10     }
    11 
    12     public void setUsername(String username) {
    13         this.username = username;
    14     }
    15 
    16     public String execute() throws Exception {
    17         return SUCCESS;
    18     }
    19 }

    UserExist.java:(模拟用户校验的类)

     1 package com.sunflower.util;
     2 
     3 public class UserExist {
     4     //判断用户是否存在
     5     public static boolean isExist(String username, String password)
     6     {
     7         String name = username.trim();
     8         String word = password.trim();
     9         
    10         if(name.equals("yuan") && word.equals("123"))
    11             return true;
    12         return false;
    13     }
    14 }    

    login.jsp:

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ taglib prefix="s" uri="/struts-tags"%>
     3 <%
     4     String path = request.getContextPath();
     5     String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
     6 %>
     7 
     8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     9 <html>
    10     <head>
    11         <base href="<%=basePath%>">
    12 
    13         <title>登录界面</title>
    14         <meta http-equiv="pragma" content="no-cache">
    15         <meta http-equiv="cache-control" content="no-cache">
    16         <meta http-equiv="expires" content="0">
    17         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18         <meta http-equiv="description" content="This is my page">
    19         <!--
    20     <link rel="stylesheet" type="text/css" href="styles.css">
    21     -->
    22     </head>
    23 
    24     <body>
    25         <center>
    26             <font color="bule" size="20">用户登录</font>
    27             <br>
    28             <s:form action="test/logintest">
    29                 <s:textfield name="username" label="用户名:" size="20"></s:textfield>
    30                 <s:textfield name="password" label="密码:" size="20"></s:textfield>
    31                 <s:submit value="提交"></s:submit>
    32             </s:form>
    33 
    34         </center>
    35     </body>
    36 </html>

    welcome.jsp:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ taglib prefix="s" uri="/struts-tags"%>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6     <head>
     7         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8         <title>登陆成功</title>
     9     </head>
    10     <body>
    11         <center>
    12             <s:property value="username"/>,恭喜你登录成功!
    13         </center>        
    14     </body>
    15 </html>
  • 相关阅读:
    路径变量@PathVariable/请求参数@RequestParam的绑定以及@RequestBody
    JSR303后端校验详细笔记
    创建ssm项目步骤
    利用 R 绘制拟合曲线
    在 Linux 中将 Caps 根据是否为修饰键分别映射到 esc 和 Ctrl
    Master Transcription Factors and Mediator Establish Super-Enhancers at Key Cell Identity Genes
    Genomic Evidence for Complex Domestication History of the Cultivated Tomato in Latin America
    Variation Revealed by SNP Genotyping and Morphology Provides Insight into the Origin of the Tomato
    The genetic, developmental, and molecular bases of fruit size and shape variation in tomato
    微信支付jsapi
  • 原文地址:https://www.cnblogs.com/hanyuan/p/2540132.html
Copyright © 2011-2022 走看看