我正在尝试部署到 Tomcat 7 中的 war 文件。它给了我以下错误。
deploy:
[echo] Deploying on Tomcat.
BUILD FAILED
C:\Users\coder\workspace\projectName\build.xml:84: java.io.IOException: Server returned
HTTP response code: 403 for URL: http://localhost:8090/manager/deploy?path=%2FprojectName
这是我的构建文件
<project name="ProjectName" default="main"
basedir=".">
<!-- Tell ant to use my environment variables -->
<property environment="env"/>
<property file="./build.properties"/>
<property name="username" value="someUsername"/>
<property name="password" value="somePassword"/>
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
<property name="tomcat.home"
value="${env.CATALINA_HOME}"/>
<property name="hibernate.home"
value="${env.CATALINA_HOME}"/>
<property name="servlet.jar"
value="${tomcat.home}/common/lib/servlet-api.jar"/>
<property name="jsp.jar"
value="${tomcat.home}/common/lib/jsp-api.jar"/>
<property name="hibernate.jar" value="C:/hibernate-distribution-3.6.4.Final/hibernate3.jar"/>
<property name="deploy.dir"
value="${tomcat.home}/webapps"/>
<property name="build.compiler" value="modern"/>
<property name="build.dir" value="build" />
<property name="src.dir" value="src"/>
<property name="war.file" value="projectName"/>
<property name="war.file.name" value="${war.file}.war"/>
<path id="project.class.path">
<fileset dir="./WEB-INF/lib/">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${src.dir}"/>
<pathelement path="${servlet.jar}"/>
<pathelement path="${jsp.jar}"/>
<pathelement path="${hibernate.jar}"/>
</path>
<target name="clean">
<delete dir="${build.dir}" includeEmptyDirs="true" />
</target>
<target name="prep">
<mkdir dir="${build.dir}"/>
</target>
<target name="compile">
<javac srcdir="${src.dir}"
destdir="${build.dir}"
debug="on"
deprecation="on">
<include name="**/*.java"/>
<classpath refid="project.class.path"/>
</javac>
</target>
<target name="cleanWebApp">
<delete file="${deploy.dir}/${war.file.name}" />
<delete dir="${deploy.dir}/${war.file}"
includeEmptyDirs="true" />
</target>
<target name="war">
<war warfile="${war.file.name}"
webxml="./WEB-INF/web.xml">
<fileset dir="./" includes="**/*.*" excludes="*.war,
**/*.nbattrs, web.xml, **/WEB-INF/**/*.*,
**/project-files/**/*.*"/>
<webinf dir="./WEB-INF" includes="**/*"
excludes="web.xml, **/*.jar, **/*.class"/>
<lib dir="./WEB-INF/lib"/>
<classes dir="${build.dir}"/>
<classes dir="${src.dir}">
<include name="**/*.properties"/>
</classes>
</war>
</target>
<target name="deploy">
<echo message="Deploying on Tomcat." />
<deploy url="http://localhost:8090/manager" username="someUsername"
password="somePassword" path="/projectName" war="./${war.file.name}" />
</target>
<target name="main" depends="clean, prep, cleanWebApp,
compile, war, deploy"/>
</project>
最佳答案
manager.username 和 manager.password 中提到的帐户必须扮演“manager-script”角色(如果不起作用,也可以扮演“admin-script”)。
似乎“manager”和“admin”角色改为“manager-gui”、“admin-gui”、“manager-script”(用于文本连接)、“admin-script”(用于文本连接)在 Tomcat 7 中。
我从下面的错误页面中找到了 4 个与经理相关的角色:
403 拒绝访问
您无权查看此页面。
如果您已经将 Manager 应用程序配置为允许访问并且您使用了浏览器的后退按钮、使用了保存的书签或类似的东西,那么您可能已经触发了已启用的跨站点请求伪造 (CSRF) 保护用于 Manager 应用程序的 HTML 界面。您需要返回主管理器页面来重置此保护。返回此页面后,您将能够继续正常使用管理器应用程序的 HTML 界面。如果您继续看到此访问被拒绝消息,请检查您是否具有访问此应用程序的必要权限。
如果您没有更改任何配置文件,请检查安装中的文件 conf/tomcat-users.xml。该文件必须包含允许您使用此 Web 应用程序的凭据。
例如,要将 manager-gui 角色添加到名为 tomcat 且密码为 s3cret 的用户,请将以下内容添加到上面列出的配置文件中。
请注意,从 Tomcat 7 开始,使用管理器应用程序所需的角色已从单个管理器角色更改为以下四个角色。您需要分配您希望访问的功能所需的角色。
manager-gui - 允许访问 HTML GUI 和状态页面
manager-script - 允许访问文本界面和状态页面
manager-jmx - 允许访问 JMX 代理和状态页面
manager-status - 只允许访问状态页面
HTML 界面受到 CSRF 保护,但文本和 JMX 界面则不然。维护 CSRF 保护:
具有 manager-gui 角色的用户不应被授予 manager-script 或 manager-jmx 角色。 如果通过浏览器访问文本或 jmx 界面(例如,用于测试,因为这些界面是为工具而不是人类设计的),然后必须关闭浏览器以终止 session 。 有关详细信息 - 请参阅 Manager App HOW-TO。
关于java - 为什么 Ant 在部署时返回 403?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7116467/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/