公司本地测试环境老项目一直用的tomcat7.0.57 前段时间更新了个war包上去,居然报了一个nomethodfound错误,本地sts上跑的又是好的,无奈换了一个tomcat8.5.61,想顺便配置下自带的manager,方便测试环境war包管理及环境部署更新,记录下碰壁过程。
1. 配置manager context
apache-tomcat-8.5.61/webapps/manager/META-INF/context
注释掉IP部分
<Context antiResourceLocking="false" privileged="true" >
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
sameSiteCookies="strict" />
<!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="10\.10\.d+\.\d+" />
-->
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
2. 配置tomcat-user.xml
按照官方文档推荐,单独设置manager-gui角色 并赋值
<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<user username="tomcat" password="password" roles="manager-gui"/>
<user username="jmx" password="password" roles="manager-jmx"/>
<user username="script" password="password" roles="manager-script"/>
3. 测试manager页面功能
到这里 manager页面已经可以顺利登陆了,停止和重载功能也可用,结果上传本地war包后,直接给跨域拦截了。。[黑人问号]
[ip]:8080/manager/html/upload?org.apache.catalina.filters.CSRF_NONCE=B0DB5199C5DC57C47014A0F43410C20B
4. 尝试配置manager web.xml
修改manager/WEB-INF/web.xml
按manager-gui这个角色 应该是可以访问upload页面的配置的,修改了url-pattern之后 再次重启 并没有生效 还是拦截了。。
最后无奈把 filter-mapping 这里htmlmanager对应的csrf拦截器注册给注释掉了。 重启后 upload终于可用了!
<!--
<filter-mapping>
<filter-name>CSRF</filter-name>
<servlet-name>HTMLManager</servlet-name>
</filter-mapping>
-->
<filter-mapping>
<filter-name>HTTP header security filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Define a Security Constraint on this Application -->
<!-- NOTE: None of these roles are present in the default users file -->
<security-constraint>
<web-resource-collection>
<web-resource-name>HTML Manager interface (for humans)</web-resource-name>
<url-pattern>/html/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager-gui</role-name>
</auth-constraint>
</security-constraint>
5. 最后
上传还有一个文件包大小显示 默认是50MB 对应的配置位置在也在manager的web.xml 修改之后 再次重启,终于完工了
<multipart-config>
<!-- 50MB max -->
<max-file-size>125829120</max-file-size>
<max-request-size>125829120</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
总结
tomcat的manager 配置 依赖web.xml 和context 。web.xml中定义了一些默认的跨域拦截 还没整明白。 后续再参考下官方文档。
manager-gui
允许访问html接口(即URL路径为/manager/html/*)
manager-script
允许访问纯文本接口(即URL路径为/manager/text/*)
manager-jmx
允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)
manager-status
允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)