struts 订阅
Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。 展开全文
Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
信息
使用人员
JavaWeb网站开发人员
外文名
Struts
平    台
Java
中文名
struts
实    质
基于MVC的WEB框架
struts结构
在Struts中,已经由一个名为ActionServlet的Servlet充当控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的struts-config.xml的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。在MVC的模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动作),这两个概念子系统分别具体对应Struts里的ActionForm与Action两个需要继承实现超类。在这里,Struts可以与各种标准的数据访问技术结合在一起,包括Enterprise Java Beans(EJB),JDBC与JNDI。在Struts的视图(View)端,除了使用标准的JavaServer Pages(JSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如Velocity Templates,XSLT等。通过应用Struts的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与 映射关系的配置文件(struts-config.xml)中。 [1] 
收起全文
精华内容
下载资源
问答
  • struts
    千次阅读
    2020-12-09 16:21:54

    下载struts2.5.26jar包

    官网下载

    更新jar

    新增或替换

    asm-7.3.1.jar
    asm-analysis-7.3.1.jar
    asm-commons-7.3.1.jar
    asm-tree-7.3.1.jar
    commons-lang3-3.8.1.jar
    commons-io-2.6.jar
    commons-fileupload-1.4.jar
    javassist-3.20.0-GA.jar
    log4j-api-2.12.1.jar
    ognl-3.1.28.jar
    struts2-core-2.5.26.jar
    struts2-json-plugin-2.5.26.jar
    struts2-junit-plugin-2.5.26.jar
    struts2-spring-plugin-2.5.26.jar
    xpp3_min-1.1.4c.jar
    xstream-1.4.11.1.jar
    xmlpull-1.1.3.1.jar
    

    删除

    xwork-core-2.3.32.jar
    2.5.X已把xwork-core整合到struts2-core,所以删除
    

    修改web.xml

    <filter>
    	<filter-name>struts2</filter-name>
    	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    

    修改weblogic.xml(如果有)

    新增session-descriptor

    <weblogic-web-app>
    	<session-descriptor>
    		<cookie-name>JSESSIONID1</cookie-name>
    	</session-descriptor>
    </weblogic-web-app>
    

    修改struts.xml

    2.1–》2.5

    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
    

    新增配置

    • package标签添加strict-method-invocation="false"和下列标签。
    • global-allowed-methods:放最下面,过滤自定义action的方法,不然不能访问
    • 如果已经配置struts.properties,可不加constant标签
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    <constant name="struts.enable.SlashesInActionNames" value="true"/>
    <constant name="struts.action.extension" value="do" />
    <package extends="struts-default" strict-method-invocation="false">
    	<global-results>
        </global-results>
        <global-allowed-methods>regex:.*</global-allowed-methods>
    </package>
    

    修改struts.xml的result-types配置

    • 注释部分为struts2.3.32配置
    <?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>
    	<package name="struts-default" abstract="true"  strict-method-invocation="false">
    		<result-types>
                <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
                <!-- <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult"/> -->
                <result-type name="dispatcher" class="org.apache.struts2.result.ServletDispatcherResult" default="true"/>
                <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult" default="true"/>
                <!-- <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
                <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
                <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
                <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
                <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/> -->
                <result-type name="httpheader" class="org.apache.struts2.result.HttpHeaderResult"/>
                <result-type name="redirect" class="org.apache.struts2.result.ServletRedirectResult"/>
                <result-type name="redirectAction" class="org.apache.struts2.result.ServletActionRedirectResult"/>
                <result-type name="stream" class="org.apache.struts2.result.StreamResult"/>
                <result-type name="velocity" class="org.apache.struts2.result.VelocityResult"/>
                <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
                <!-- <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
                <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" /> -->
                <result-type name="plainText" class="org.apache.struts2.result.PlainTextResult" />
                <result-type name="postback" class="org.apache.struts2.result.PostbackResult" />
                <!--自定义result-type-->
            	<result-type name="json" class="org.apache.struts2.json.JSONResult">
    				<param name="root">jsonRoot</param>
    			</result-type>			
            </result-types>
            <interceptors>
    			<interceptor name="i18n" class="org.apache.struts2.interceptor.I18nInterceptor"/>
                <!-- <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/> -->
    		</interceptors>
    		<!-- 其他配置不变,这里略 -->
    		<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
            <global-allowed-methods>regex:.*</global-allowed-methods>
        </package>
    </struts>
    

    如果重写了ParametersInterceptor.java类

    原方法

    protected Map<String, Object> retrieveParameters(ActionContext ac) {
        return ac.getParameters();
    }
    

    新方法

    protected Map<String, String[]> retrieveParameters(ActionContext ac) {
       HttpParameters httpParameters = ac.getParameters();
       return httpParameters.toMap();
    }
    

    处理上传附件问题(2021.03.30修改)

    修改struts.xml的interceptors配置

    • 注释部分为struts2.3.32配置
    <?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>
    	<package name="struts-default" abstract="true"  strict-method-invocation="false">
    		<result-types>
                <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
                <!-- <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult"/> -->
                <result-type name="dispatcher" class="org.apache.struts2.result.ServletDispatcherResult" default="true"/>
                <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult" default="true"/>
                <!-- <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
                <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
                <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
                <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
                <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/> -->
                <result-type name="httpheader" class="org.apache.struts2.result.HttpHeaderResult"/>
                <result-type name="redirect" class="org.apache.struts2.result.ServletRedirectResult"/>
                <result-type name="redirectAction" class="org.apache.struts2.result.ServletActionRedirectResult"/>
                <result-type name="stream" class="org.apache.struts2.result.StreamResult"/>
                <result-type name="velocity" class="org.apache.struts2.result.VelocityResult"/>
                <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
                <!-- <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
                <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" /> -->
                <result-type name="plainText" class="org.apache.struts2.result.PlainTextResult" />
                <result-type name="postback" class="org.apache.struts2.result.PostbackResult" />
                <!--自定义result-type-->
            	<result-type name="json" class="org.apache.struts2.json.JSONResult">
    				<param name="root">jsonRoot</param>
    			</result-type>			
            </result-types>
            <interceptors>
    			<interceptor name="i18n" class="org.apache.struts2.interceptor.I18nInterceptor"/>
                <!-- <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/> -->
                <interceptor name="fileUpload" class="com.struts2.interceptor.FileUploadInterceptor"/>
    <!--        <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> -->
    		</interceptors>
    		<!-- 其他配置不变,这里略 -->
    		<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
            <global-allowed-methods>regex:.*</global-allowed-methods>
        </package>
    </struts>
    

    FileUploadInterceptor.java

    package com.struts2.interceptor;
    
    import java.io.File;
    import java.text.NumberFormat;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.apache.struts2.ServletActionContext;
    import org.apache.struts2.dispatcher.LocalizedMessage;
    import org.apache.struts2.dispatcher.Parameter;
    import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
    import org.apache.struts2.dispatcher.multipart.UploadedFile;
    import org.apache.struts2.util.ContentTypeMatcher;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.ActionProxy;
    import com.opensymphony.xwork2.LocaleProvider;
    import com.opensymphony.xwork2.LocaleProviderFactory;
    import com.opensymphony.xwork2.TextProvider;
    import com.opensymphony.xwork2.TextProviderFactory;
    import com.opensymphony.xwork2.inject.Container;
    import com.opensymphony.xwork2.inject.Inject;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    import com.opensymphony.xwork2.interceptor.ValidationAware;
    import com.opensymphony.xwork2.util.TextParseUtil;
    
    
    public class FileUploadInterceptor extends AbstractInterceptor {
    
        private static final long serialVersionUID = -4764627478894962478L;
    
        protected static final Logger LOG = LogManager.getLogger(FileUploadInterceptor.class);
    
        protected Long maximumSize;
        protected Set<String> allowedTypesSet = Collections.emptySet();
        protected Set<String> allowedExtensionsSet = Collections.emptySet();
    
        private ContentTypeMatcher matcher;
        private Container container;
    
        @Inject
        public void setMatcher(ContentTypeMatcher matcher) {
            this.matcher = matcher;
        }
    
        @Inject
        public void setContainer(Container container) {
            this.container = container;
        }
    
        /**
         * Sets the allowed extensions
         *
         * @param allowedExtensions A comma-delimited list of extensions
         */
        public void setAllowedExtensions(String allowedExtensions) {
            allowedExtensionsSet = TextParseUtil.commaDelimitedStringToSet(allowedExtensions);
        }
    
        /**
         * Sets the allowed mimetypes
         *
         * @param allowedTypes A comma-delimited list of types
         */
        public void setAllowedTypes(String allowedTypes) {
            allowedTypesSet = TextParseUtil.commaDelimitedStringToSet(allowedTypes);
        }
    
        /**
         * Sets the maximum size of an uploaded file
         *
         * @param maximumSize The maximum size in bytes
         */
        public void setMaximumSize(Long maximumSize) {
            this.maximumSize = maximumSize;
        }
    
        /* (non-Javadoc)
         * @see com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
         */
    
        public String intercept(ActionInvocation invocation) throws Exception {
            ActionContext ac = invocation.getInvocationContext();
    
            HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);
    
            if (!(request instanceof MultiPartRequestWrapper)) {
                if (LOG.isDebugEnabled()) {
                    ActionProxy proxy = invocation.getProxy();
                    LOG.debug(getTextMessage("struts.messages.bypass.request", new String[]{proxy.getNamespace(), proxy.getActionName()}));
                }
    
                return invocation.invoke();
            }
    
            ValidationAware validation = null;
    
            Object action = invocation.getAction();
    
            if (action instanceof ValidationAware) {
                validation = (ValidationAware) action;
            }
    
            MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;
    
            if (multiWrapper.hasErrors() && validation != null) {
                TextProvider textProvider = getTextProvider(action);
                for (LocalizedMessage error : multiWrapper.getErrors()) {
                    String errorMessage;
                    if (textProvider.hasKey(error.getTextKey())) {
                        errorMessage = textProvider.getText(error.getTextKey(), Arrays.asList(error.getArgs()));
                    } else {
                        errorMessage = textProvider.getText("struts.messages.error.uploading", error.getDefaultMessage());
                    }
                    validation.addActionError(errorMessage);
                }
            }
    
            // bind allowed Files
            Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
            while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
                // get the value of this input tag
                String inputName = (String) fileParameterNames.nextElement();
    
                // get the content type
                String[] contentType = multiWrapper.getContentTypes(inputName);
    
                if (isNonEmpty(contentType)) {
                    // get the name of the file from the input tag
                    String[] fileName = multiWrapper.getFileNames(inputName);
    
                    if (isNonEmpty(fileName)) {
                        // get a File object for the uploaded File
                        UploadedFile[] files = multiWrapper.getFiles(inputName);
                        if (files != null && files.length > 0) {
                            List<File> acceptedFiles = new ArrayList<>(files.length);
                            List<String> acceptedContentTypes = new ArrayList<>(files.length);
                            List<String> acceptedFileNames = new ArrayList<>(files.length);
                            String contentTypeName = inputName + "ContentType";
                            String fileNameName = inputName + "FileName";
    
                            for (int index = 0; index < files.length; index++) {
                                if (acceptFile(action, files[index], fileName[index], contentType[index], inputName, validation)) {
                                    acceptedFiles.add((File)files[index].getContent());
                                    acceptedContentTypes.add(contentType[index]);
                                    acceptedFileNames.add(fileName[index]);
                                }
                            }
    
                            if (!acceptedFiles.isEmpty()) {
                                Map<String, Parameter> newParams = new HashMap<>();
                                newParams.put(inputName, new Parameter.File(inputName, acceptedFiles.toArray(new File[acceptedFiles.size()])));
                                newParams.put(contentTypeName, new Parameter.File(contentTypeName, acceptedContentTypes.toArray(new String[acceptedContentTypes.size()])));
                                newParams.put(fileNameName, new Parameter.File(fileNameName, acceptedFileNames.toArray(new String[acceptedFileNames.size()])));
                                ac.getParameters().appendAll(newParams);
                            }
                        }
                    } else {
                        if (LOG.isWarnEnabled()) {
                            LOG.warn(getTextMessage(action, "struts.messages.invalid.file", new String[]{inputName}));
                        }
                    }
                } else {
                    if (LOG.isWarnEnabled()) {
                        LOG.warn(getTextMessage(action, "struts.messages.invalid.content.type", new String[]{inputName}));
                    }
                }
            }
    
            // invoke action
            return invocation.invoke();
        }
    
        /**
         * Override for added functionality. Checks if the proposed file is acceptable based on contentType and size.
         *
         * @param action      - uploading action for message retrieval.
         * @param file        - proposed upload file.
         * @param filename    - name of the file.
         * @param contentType - contentType of the file.
         * @param inputName   - inputName of the file.
         * @param validation  - Non-null ValidationAware if the action implements ValidationAware, allowing for better
         *                    logging.
         * @return true if the proposed file is acceptable by contentType and size.
         */
        protected boolean acceptFile(Object action, UploadedFile file, String filename, String contentType, String inputName, ValidationAware validation) {
            boolean fileIsAcceptable = false;
    
            // If it's null the upload failed
            if (file == null) {
                String errMsg = getTextMessage(action, "struts.messages.error.uploading", new String[]{inputName});
                if (validation != null) {
                    validation.addFieldError(inputName, errMsg);
                }
    
                if (LOG.isWarnEnabled()) {
                    LOG.warn(errMsg);
                }
            } else if (file.getContent() == null) {
                String errMsg = getTextMessage(action, "struts.messages.error.uploading", new String[]{filename});
                if (validation != null) {
                    validation.addFieldError(inputName, errMsg);
                }
                if (LOG.isWarnEnabled()) {
                    LOG.warn(errMsg);
                }
            } else if (maximumSize != null && maximumSize < file.length()) {
                String errMsg = getTextMessage(action, "struts.messages.error.file.too.large", new String[]{inputName, filename, file.getName(), "" + file.length(), getMaximumSizeStr(action)});
                if (validation != null) {
                    validation.addFieldError(inputName, errMsg);
                }
    
                if (LOG.isWarnEnabled()) {
                    LOG.warn(errMsg);
                }
            } else if ((!allowedTypesSet.isEmpty()) && (!containsItem(allowedTypesSet, contentType))) {
                String errMsg = getTextMessage(action, "struts.messages.error.content.type.not.allowed", new String[]{inputName, filename, file.getName(), contentType});
                if (validation != null) {
                    validation.addFieldError(inputName, errMsg);
                }
    
                if (LOG.isWarnEnabled()) {
                    LOG.warn(errMsg);
                }
            } else if ((!allowedExtensionsSet.isEmpty()) && (!hasAllowedExtension(allowedExtensionsSet, filename))) {
                String errMsg = getTextMessage(action, "struts.messages.error.file.extension.not.allowed", new String[]{inputName, filename, file.getName(), contentType});
                if (validation != null) {
                    validation.addFieldError(inputName, errMsg);
                }
    
                if (LOG.isWarnEnabled()) {
                    LOG.warn(errMsg);
                }
            } else {
                fileIsAcceptable = true;
            }
    
            return fileIsAcceptable;
        }
    
        private String getMaximumSizeStr(Object action) {
            return NumberFormat.getNumberInstance(getLocaleProvider(action).getLocale()).format(maximumSize);
        }
    
        /**
         * @param extensionCollection - Collection of extensions (all lowercase).
         * @param filename            - filename to check.
         * @return true if the filename has an allowed extension, false otherwise.
         */
        private boolean hasAllowedExtension(Collection<String> extensionCollection, String filename) {
            if (filename == null) {
                return false;
            }
    
            String lowercaseFilename = filename.toLowerCase();
            for (String extension : extensionCollection) {
                if (lowercaseFilename.endsWith(extension)) {
                    return true;
                }
            }
    
            return false;
        }
    
        /**
         * @param itemCollection - Collection of string items (all lowercase).
         * @param item           - Item to search for.
         * @return true if itemCollection contains the item, false otherwise.
         */
        private boolean containsItem(Collection<String> itemCollection, String item) {
            for (String pattern : itemCollection)
                if (matchesWildcard(pattern, item))
                    return true;
            return false;
        }
    
        private boolean matchesWildcard(String pattern, String text) {
            Object o = matcher.compilePattern(pattern);
            return matcher.match(new HashMap<String, String>(), text, o);
        }
    
        private boolean isNonEmpty(Object[] objArray) {
            boolean result = false;
            for (int index = 0; index < objArray.length && !result; index++) {
                if (objArray[index] != null) {
                    result = true;
                }
            }
            return result;
        }
    
        protected String getTextMessage(String messageKey, String[] args) {
            return getTextMessage(this, messageKey, args);
        }
    
        protected String getTextMessage(Object action, String messageKey, String[] args) {
            if (action instanceof TextProvider) {
                return ((TextProvider) action).getText(messageKey, args);
            }
            return getTextProvider(action).getText(messageKey, args);
        }
    
        private TextProvider getTextProvider(Object action) {
            TextProviderFactory tpf = container.getInstance(TextProviderFactory.class);
            return tpf.createInstance(action.getClass());
        }
    
        private LocaleProvider getLocaleProvider(Object action) {
            LocaleProvider localeProvider;
            if (action instanceof LocaleProvider) {
                localeProvider = (LocaleProvider) action;
            } else {
                LocaleProviderFactory localeProviderFactory = container.getInstance(LocaleProviderFactory.class);
                localeProvider = localeProviderFactory.createLocaleProvider();
            }
            return localeProvider;
        }
    }
    
    

    修改xwork-conversion.properties配置

    java.io.File=com.struts2.UploadedFileConverter
    

    UploadedFileConverter.java

    package com.struts2;
    
    import java.io.File;
    import java.lang.reflect.Array;
    import java.lang.reflect.Member;
    import java.util.Map;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.apache.struts2.dispatcher.multipart.StrutsUploadedFile;
    import org.apache.struts2.dispatcher.multipart.UploadedFile;
    
    import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
    
    
    public class UploadedFileConverter extends DefaultTypeConverter {
    
        private static final Logger LOG = LogManager.getLogger(UploadedFileConverter.class);
    
        @Override
        public Object convertValue(Map<String, Object> context, Object target, Member member, String propertyName, Object value, Class toType) {
            if (File.class.equals(toType)) {
                LOG.debug("Converting {} into {}, consider switching to {} and do not access {} directly!",
                        File.class.getName(), UploadedFile.class.getName(), UploadedFile.class.getName(), File.class.getName());
    
                Object obj;
                if (value.getClass().isArray() && Array.getLength(value) == 1) {
                    obj = Array.get(value, 0);
                } else {
                    obj = value;
                }
    
               if (obj instanceof UploadedFile) {
                    UploadedFile file = (UploadedFile) obj;
                    if (file.getContent() instanceof File) {
                        return file.getContent();
                    }
                    return new File(file.getAbsolutePath());
                }else {
                	return new File(obj.toString());
                }
            }
    
            return super.convertValue(context, target, member, propertyName, value, toType);
        }
    
    }
    
    更多相关内容
  • Struts2漏洞测试

    2022-04-18 11:31:37
    Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试...
  • Struts2漏洞检查工具2019版 警告: 本工具为漏洞自查工具,请勿非法攻击他人网站! ==漏洞编号==============影响版本=========================官方公告==========================================影响范围====...
  • struts2全版本检测,利用工具
  • Struts2漏洞利用工具2019版 V2.3.zip
  • struts2-core.jar

    2016-08-03 23:39:11
    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...
  • import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction等缺少
  • Struts2漏洞检查工具2018版,带最新的漏洞检查,方便使用。目前支持一键检测Struts2漏洞
  • Struts2-3.24集合jar

    2016-04-18 18:23:51
    struts2-config-browser-plugin-2.3.24.jar, struts2-core-2.3.24.jar, struts2-jasperreports-plugin-2.3.24.jar, struts2-jfreechart-plugin-2.3.24.jar, struts2-pell-multipart-plugin-2.3.24.jar, struts2-...
  • struts2最新版本 struts-2.3.28
  • Struts2漏洞利用工具Devmode版 检测struts2漏洞的一款工具
  • 最新版本的Struts2+Spring4+Hibernate4框架整合

    千次下载 热门讨论 2014-10-15 14:39:34
    项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
  • Struts2权威指南完整版

    2017-09-18 11:40:19
    Struts 2.1权威指南》是《Struts 2权威指南》的第二版,《Struts 2.1权威指南》介绍的Struts 2是最新的Struts 2.1。相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug...
  • 不同版本的 struts2.dtd

    2017-04-22 09:48:22
    不同 struts2.dtd
  • 直接输入出现漏洞的url即可攻击. 远程攻击、攻击难度低、不需要用户认证,对机密性、完整性、可用性均构成完全影响。建议大家升级最新jar包!
  • Struts所需要的jar

    千次下载 热门讨论 2016-03-22 13:09:45
    这里面是Struts在搭建SSH框架所需要的jar包。。
  • 2.如果您使用基于Jakarta插件,请升级到Apache Struts 2.3.32或2.5.10.1版本。(强烈推荐) 3.升级到2.3.32所用到的jar包: freemarker-2.3.22.jar ognl-3.0.19.jar struts2-convention-plugin-2.3.32.jar struts2-...
  • JavaEE源代码 Struts2.0

    2022-07-09 15:35:13
    JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0...
  • Struts2视频教程

    热门讨论 2012-08-27 15:13:48
    Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来作为Web框架进行开发,掌握Struts2是每个进行Web开发的Java程序员的一项必备技能。 本视频对Struts2...
  • struts2.3.32 下载

    热门讨论 2017-03-08 11:21:36
    struts2.3.32最新包,可以解决Struts2-S2-045远程代码执行漏洞。
  • struts2中的struts-default.xml
  • JavaEE源代码 Struts_SpringJavaEE源代码 Struts_SpringJavaEE源代码 Struts_SpringJavaEE源代码 Struts_SpringJavaEE源代码 Struts_SpringJavaEE源代码 Struts_SpringJavaEE源代码 Struts_SpringJavaEE源代码 ...
  • 1.解压struts-2.1.6-all.zip 3 2.六个基本包 3 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 4 (5)其它...
  • struts1五大标签库

    2018-05-21 15:20:59
    struts-tiles.tld,struts-html.tld,struts-logic.tld,struts-bean.tld,struts-nested.tld,struts1五大标签库
  • struts1和struts2的区别

    2011-06-24 16:54:07
    struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别...
  • struts2实例 学生信息管理系统

    热门讨论 2012-11-12 20:41:57
    struts2实现的学生信息管理系统 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ...
  • JavaEE源代码 Struts_HibernateJavaEE源代码 Struts_HibernateJavaEE源代码 Struts_HibernateJavaEE源代码 Struts_HibernateJavaEE源代码 Struts_HibernateJavaEE源代码 Struts_HibernateJavaEE源代码 Struts_...
  • 本书第1章到第3章为入门篇,通过两个Struts应用实例,引导读者把握设计、开发和部署Struts应用的整体流程,充分体会Struts框架在开放大型、可扩展的Web应用方面发挥的优势。第4章到第7章深入探讨了Struts框架的核心...
  • struts2必备jar包官方绿色版

    万次下载 热门讨论 2012-10-08 18:02:42
    struts2最新官网的jar包,已经是最少的包的无法再删除了, commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar commons-logging-1.1.1.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 461,558
精华内容 184,623
关键字:

struts

友情链接: 48V 1KW电机驱动器.rar