如何解决struts 2 迁移到 struts 2.5 调用上下文参数
我正在尝试从 2.1.8 升级到 2.5.17 ,我已经完成了所有报告的迁移更改。
但是我遇到了 url 参数的问题
“使用值 ['vijay',] 设置表达式 'user' 时出错”
“使用值 ['Admin',] 设置表达式 'tf' 时出错”
我怀疑这个问题是由于 invocation.getInvocationContext().getParameters() 的返回类型从 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 </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 举报,一经查实,本站将立刻删除。