微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

struts 2 迁移到 struts 2.5 调用上下文参数

如何解决struts 2 迁移到 struts 2.5 调用上下文参数

我正在尝试从 2.1.8 升级到 2.5.17 ,我已经完成了所有报告的迁移更改。 但是我遇到了 url 参数的问题 “使用值 ['vijay',] 设置表达式 'user' 时出错” “使用值 ['Admin',] 设置表达式 'tf' 时出错” 我怀疑这个问题是由于 invocation.getInvocationContext().getParameters() 的返回类型从 MAp 更改为 Map

有人可以帮我吗?

这是我的网址:http://localhost:8080/xxss/loginAction.action?user=vijay&tf=Admin

我的 struts.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>

    <constant name="struts.enable.DynamicmethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.custom.i18n.resources" value="application" />
    
    <package name="default" extends="struts-default,json-default" namespace="/">

        <interceptors>

            <interceptor name="auth"
                class="com.singaporeair.xxss.common.interceptor.AuthorizationInterceptor">
            </interceptor>

            <interceptor name="redirectMsg"
                class="com.singaporeair.xxss.common.interceptor.RedirectMessageInterceptor">
            </interceptor>
            
            <interceptor-stack name="xxssInterceptorStack">
                <interceptor-ref name="auth"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="redirectMsg"></interceptor-ref>
                <interceptor-ref name="params"/>
            </interceptor-stack>

            <interceptor-stack name="xxssjsonValidationWorkflow">
                <interceptor-ref name="auth" />
                <interceptor-ref name="exception" />
                <interceptor-ref name="alias" />
                <interceptor-ref name="servletConfig" />
                <interceptor-ref name="prepare" />
                <interceptor-ref name="i18n" />
                <interceptor-ref name="chain" />
                <interceptor-ref name="debugging" />
                <interceptor-ref name="profiling" />
                <interceptor-ref name="scopedModelDriven" />
                <interceptor-ref name="modelDriven" />
                <interceptor-ref name="fileUpload" />
                <interceptor-ref name="checkBox" />
                <interceptor-ref name="staticParams" />
                <interceptor-ref name="params"/>
                <interceptor-ref name="conversionError" />
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel</param>
                </interceptor-ref>
                <interceptor-ref name="jsonValidation" />
                <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,cancel</param>
                </interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="xxssInterceptorStack"></default-interceptor-ref>

        <global-results>
            <result name="failure">jsp/common/error.jsp</result>
            <result name="unAuthorized">jsp/common/unauthorized.jsp</result>
            <result name="exceptionPage">jsp/common/exception.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping result="exceptionPage"
                exception="java.lang.RuntimeException" />
            <exception-mapping result="exceptionPage"
                exception="java.lang.Exception" />
        </global-exception-mappings>


        <action name="loginAction" class="LoginAction" method="authenticate">
        
            <result name="multipleRoles">jsp/common/selectRole.jsp</result>
            <result name="success">jsp/common/home.jsp</result>
        </action>

    </package>

</struts>

我的 web.xml

<?xml version="1.0"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name>xxss</display-name>
  <welcome-file-list>
    <welcome-file>/jsp/index.jsp</welcome-file>
    <!--<welcome-file>loginAction.action</welcome-file>-->
  </welcome-file-list>
  
    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <!-- 
   added to monitor performance using javamelody 
  -->
  <filter>
    <filter-name>monitoring</filter-name>
    <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
  </filter> 
  <filter-mapping>
    <filter-name>monitoring</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>
    
    <!-- 
    added to refer beanref.xml in ejb jar as parent app context
    this enables multi war spring apps in one EAR 
    -->
    <context-param>
        <param-name>parentContextKey</param-name>
        <param-value>ear.context</param-value>
    </context-param>
    
    <listener>
        <listener-class>net.bull.javamelody.SessionListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <servlet>
        <servlet-name>dwr</servlet-name>
        <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>crossDomainSessionSecurity</param-name> 
            <param-value>false</param-value>
        </init-param>       
    </servlet>

    <servlet-mapping>
        <servlet-name>dwr</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
    
     <session-config>
     <!-- 30 min timeout -->
     <session-timeout>30</session-timeout>
  </session-config>

</web-app>

动作类

package com.xxssair.xxss.action.admin;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.interceptor.validation.SkipValidation;
import org.springframework.beans.factory.annotation.Autowired;

import com.opensymphony.xwork2.ActionSupport;
import com.xxssair.xxss.common.xxssWebConstants;
import com.xxssair.xxss.common.exception.xxssException;
import com.xxssair.xxss.entity.admin.RoleMgmt;
import com.xxssair.xxss.entity.admin.UserDetail;
import com.xxssair.xxss.facade.admin.AdminFacade;
import com.xxssair.xxss.util.xxssConstants;


public class LoginAction extends ActionSupport implements SessionAware,ServletRequestAware{
    private Logger logger=Logger.getLogger("HAS");
    private Map<String,Object> session;
    // Added for MKS01570 - Role Management Starts
    private Map<Long,String> multipleRoleMap;
    
    private List<UserDetail> tmpuserDetailList ;
    
    public List<UserDetail> getTmpuserDetailList() {
        return tmpuserDetailList;
    }

    public void setTmpuserDetailList(List<UserDetail> tmpuserDetailList) {
        this.tmpuserDetailList = tmpuserDetailList;
    }
    private long roleId = 0;
        
    public long getRoleId() {
        return roleId;
    }

    public void setRoleId(long roleId) {
        this.roleId = roleId;
    }

    public Map<Long,String> getMultipleRoleMap() {
        return multipleRoleMap;
    }

    public void setMultipleRoleMap(Map<Long,String> multipleRoleMap) {
        this.multipleRoleMap = multipleRoleMap;
    }
    private HttpServletRequest request;
    
    protected String HEADER_REFERER = "Referer";
    protected String SSO_PERSONAL_NUM = "personalnum";
    protected String SSO_UNIVERSAL_ID = "SMUNIVERSALID";
    protected String SSO_GROUPS = "groups";
    // Added for MKS01570 - Role Management Starts
    private boolean status = false;
    // Added for MKS01570 - Role Management Ends
    @Autowired
    private AdminFacade adminFacade;
    
    /**
     * @return the session
     */
    public Map<String,Object> getSession() {
        return session;
    }

    /**
     * @return
     */
    @SkipValidation
    public String authenticate()throws xxssException{

        
        if(request.getParameter("tf")!=null && request.getParameter("tf").equals("xxssAdmin")){
            userName=request.getParameter("user");
            
        }else{
            String userID = request.getHeader(WIN2KID).toString();                      
            userName=userID;            
        }
        // Added for MKS01570 - Role Management Starts
        
        List<UserDetail> userDetail=adminFacade.getUserDetail(userName/*,company*/);

        if(userDetail != null && userDetail.size() > 1 && !userDetail.isEmpty()){
            tmpuserDetailList=userDetail;
            session.put("tmpuserDetailList",tmpuserDetailList);
            status = true;
        }
        
        if(status){
            UserDetail user = new UserDetail();
            
            List<RoleMgmt> roleList=adminFacade.getRolesByUserName(userName);
            for(UserDetail userDtl : userDetail) {
                if(userDtl.getLastLoginDate()!=null) {
                    user=userDtl;
                    break;
                }
                    
            }
            //adminFacade.updatLastLoginInfo(user.getUserId());
            multipleRoleMap=new HashMap<Long,String>();
            
            for(RoleMgmt role:roleList){
                logger.info("roleid---->"+role.getRoleId());
                logger.info("rolename---->"+role.getRoleName());
                multipleRoleMap.put(role.getRoleId(),role.getRoleName());
            }
            //session.put("userName",userName);
            session.put("user",user);
            return ("multipleRoles");
        }else if(userDetail!=null && !userDetail.isEmpty()){
            adminFacade.updatLastLoginInfo(userDetail.get(0).getUserId());
            
            fetchMenu(userDetail.get(0));
            
            //UserDetail tempuserDetail=adminFacade.getUserDetail(userName/*,company*/);
            session.put("user",userDetail.get(0));
            
            return("success");          
        }else{
            logger.info("unAuthorized User:"+userName);
            return "unAuthorized";
        }
    }
    
    public AdminFacade getAdminFacade() {
        return adminFacade;
    }

    public void setAdminFacade(AdminFacade adminFacade) {
        this.adminFacade = adminFacade;
    }

我的 AuthenticationInterceptor 类

/**
 * @author vijay
 *
 */

public class AuthorizationInterceptor implements Interceptor {  
    

        /**
         * 
         */
        // Added for MKS01570 - Role Management Starts
        private Logger logger=Logger.getLogger("HAS");
        // Added for MKS01570 - Role Management Ends
        private static final long serialVersionUID = 1L;
        
        @Autowired
        private AdminFacade adminFacade;
        
        private Map session;
        /* (non-Javadoc)
         * @see com.opensymphony.xwork2.interceptor.Interceptor#destroy()
         */
        @Override
        public void destroy() {
        }
    
        /* (non-Javadoc)
         * @see com.opensymphony.xwork2.interceptor.Interceptor#init()
         */
        @Override
        public void init() {
        }
    
        /* (non-Javadoc)
         * @see com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
         */
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
    
            String actionName;
            actionName=invocation.getProxy().getActionName();
    
            session=invocation.getInvocationContext().getSession();
            String result;
            
            String byPassAccess="false";//testByPassBackDoor();
            
            Map<String,Parameter> newParams = new HashMap<String,Parameter>();
            newParams.put("request_locale",new Parameter.Request("request_locale",new String[] {"en_US"}));
            invocation.getInvocationContext().getParameters().appendAll(newParams);
            
            
           
            /**
             * End of Locale Change
             */
            
            if(!byPassAccess.equals("false")){
                session.put("accessprivilege",byPassAccess);
                result=invocation.invoke();
            }
            else{
                if(!isActionExempted(actionName)){
                    if(session.get("user")!=null){
                        
                        UserDetail userDetail=(UserDetail) session.get("user");
                        long roleId=userDetail.getRoleMgmt().getRoleId();
                        
                        ScreenActionMapping screenActionMapping;
                        screenActionMapping=adminFacade.getScrActionMpg(actionName);
                        logger.info("after getScrActionMpg"+actionName);
                        String accessRight;
                        
                        
                            long scrId=adminFacade.getScrActionMpg(actionName).getScrId();
                            accessRight=adminFacade.getRoleAccessRight(roleId,scrId);
                            
                        }else{
                                logger.info("accessRight null");
                                accessRight=null;
                            }
                        
                        
                        
                        // use roleId and scrId to get AccessRight
                        
                        if(accessRight!=null && (!accessRight.equals("n"))){
                            
                            session.put("accessprivilege",accessRight);
    
    
                            Object action = invocation.getAction();
                            
                            if (action instanceof UserAware) {
                                UserAware userAwareAction = (UserAware) action;
                                userAwareAction.setUser(userDetail);
                                logger.info("insdie aware"+userDetail.getUserName());
                                
                            }
                            
    
                            logger.info("accessRight not equal to n");
                            result=invocation.invoke();
                            logger.info("invocation1---->"+result);
                            }else if(accessRight == null && actionName.equalsIgnoreCase("Home")){       
                            result=invocation.invoke();
                        }else{
                            result="unAuthorized";
                        }
                                                        
                    }
                    else{
                        result="unAuthorized";
                    }
                }else{
                result=invocation.invoke();
                }   
            }
            return(result);
        }
    
        /**
         * @return the session
         */
        public Map getSession() {
            return session;
        }
    
        /**
         * @param session the session to set
         */
        public void setSession(Map session) {
            this.session = session;
        }
        
        private boolean isActionExempted(String actionName){
            
            boolean status=false;
            
            List<String> exemptedActionList;
            
            exemptedActionList=new ArrayList<String>();
            
            exemptedActionList.add("loginAction");
            exemptedActionList.add("logoutAction");
            // Added for MKS01570 - Role Management Starts
            exemptedActionList.add("userRoleLogin");
            // Added for MKS01570 - Role Management Ends
            exemptedActionList.add("mealDesc");
            exemptedActionList.add("fetchMealDesc");
            
            for(String actName:exemptedActionList){
                if(actName.equals(actionName)){
                    status=true;
                    break;
                }               
            }
            // Added for MKS01570 - Role Management Starts
            logger.info("Status---->"+status);
            // Added for MKS01570 - Role Management Ends
            return status;
        }
    
    }
    }

我的jsp

<%@taglib uri="/struts-tags" prefix="s"%>  
<jsp:include page="loginHeader.jsp"></jsp:include>
<body onload="javascript:init();">
<!-- FOR PAGE LOAD -->
<div id="loading" style="width:100%;height:100%; text-align:center;background-color:white;">
    <img src="content/images/loading3.gif" border=0>
</div>
<script type="text/javascript" src="content/js/jsPageLoad.js"></script>
<!-- END OF LOADING -->
<div id="divPageContent" style="display:none;">
<!-- for round corner Box -->
<div id="wrapper">

<div>
<div id="page">
<div id="page-bgtop">
<div id="content">
<div class="postl">
<div class="postr">
<div class="post-bgtopl">
<div class="post-bgtopr">
<div class="post-bgbtml">
<div class="post-bgbtmr">
<!--end for round corner Box -->

<div id="xxssairheading">User Role Login&nbsp; </div>
<div  align="center" id="appText" style='font-family:Verdana;font-weight:bold;color=#2d2b2b;font-size:25;'></div>
<ul id ="errorMsg"><li id="roleError"></li></ul>
<div align="center">

<s:form theme="simple" onsubmit="return validate()">
<s:fielderror cssClass="error"/>
    <s:actionerror cssClass="error"/>
    <s:actionmessage cssClass="successmsg"/>
<table width=50% align="center" class="jspform">

        <tr class="jspform">
            <td class="jspform" width=20%><font color=#003366 size="2" face="Verdana">
            Role Name: <s:select name="roleId" list="multipleRoleMap" headerKey="" headerValue="Select a Role" theme="simple"/>
            </font>
            
        
        <s:submit action="userRoleLogin" value="Login"  theme="simple" cssClass="btn" /></td>
         
        
        </tr>   
            
    </table>
    </s:form>
</div>

<!-- for round corner Box -->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="clear: both; height: 1px"></div>
</div>
</div>
</div>
<!-- end for round corner Box -->

</div>
<jsp:include page="footer.jsp"></jsp:include>
</body>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。