...
We haven't added much, if any, security yet, because anyone who can CAS authenticate can now access the Manager. We need to add an authorization layer. For this we'll use the very simple Filter that comes with the Java CAS client to declare NetIDs authorized to access the Manager.
The SimpleCASAuthorization filter takes a whitespace-delimitted list of authorized usernames and asserts that the CAS authenticated username is one of these authorized users, throwing an exception when this is not the case. Here, for example, we authorize both user "awp9" and user "jdb53" to access Tomcat manager.
Add this filter declaration:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<filter> <filter-name>Authz Filter</filter-name> <filter-class>edu.yale.its.tp.cas.client.filter.SimpleCASAuthorizationFilter</filter-class> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.authorizedUsers</param-name> <param-value>awp9<value>awp9 jdb53</param-value> </init-param> </filter> |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Tomcat Manager Application</display-name> <description> A scriptable management web application for the Tomcat Web Server; Manager lets you view, load/unload/etc particular web applications. </description> <filter> <filter-name>CASFilter</filter-name> <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> <param-value>https://secure.its.yale.edu/cas/login</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>https://secure.its.yale.edu/cas/serviceValidate</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>hkg2.cis.yale.edu:8080</param-value> </init-param> </filter> <filter> <filter-name>Authz Filter</filter-name> <filter-class>edu.yale.its.tp.cas.client.filter.SimpleCASAuthorizationFilter</filter-class> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.authorizedUsers</param-name> <param-value>awp9<value>awp9 jdb53</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Authz Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Define the Manager Servlet Change servlet-class to: org.apache.catalina.servlets.HTMLManagerServlet to get a Servlet with a more intuitive HTML interface, don't change if you have software that is expected to parse the output from ManagerServlet since they're not compatible. --> <servlet> <servlet-name>Manager</servlet-name> <servlet-class>org.apache.catalina.manager.ManagerServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> </servlet> <servlet> <servlet-name>HTMLManager</servlet-name> <servlet-class>org.apache.catalina.manager.HTMLManagerServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> </servlet> <servlet> <servlet-name>Status</servlet-name> <servlet-class>org.apache.catalina.manager.StatusManagerServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> </servlet> <servlet> <servlet-name>JMXProxy</servlet-name> <servlet-class>org.apache.catalina.manager.JMXProxyServlet</servlet-class> </servlet> <!-- Define the Manager Servlet Mapping --> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/list</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/sessions</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/start</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/stop</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/install</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/remove</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/deploy</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/undeploy</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/reload</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/save</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/serverinfo</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/roles</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Manager</servlet-name> <url-pattern>/resources</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Status</servlet-name> <url-pattern>/status/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>JMXProxy</servlet-name> <url-pattern>/jmxproxy/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>HTMLManager</servlet-name> <url-pattern>/html/*</url-pattern> </servlet-mapping> </web-app> |
...