2014-09-26 143 views
3

最近我一直在使用彈簧啓動進行一些項目,我非常喜歡它。對於一個新項目,我們希望使用tomcat-users.xml進行真正的基本認證,但我無法弄清楚如何在沒有web.xml文件的情況下使用該機制。大多數使用彈簧靴的人似乎都在使用彈簧安全裝置。集裝箱安全彈簧啓動

是否有可能在spring引導java配置模型中使用tomcat容器安全性?我知道這打破了可運行jar範例,但我們打算將它作爲一個戰爭部署。

+0

看http://stackoverflow.com/a/25999919/28214這裏有一個以編程方式配置用戶的例子。 – gregturn 2014-09-26 19:19:49

+0

這是以編程方式設置用戶的絕佳信息,但它不包括如何使用容器安全保護URL資源,這是我失蹤的一部分。 – NTyler 2014-09-28 14:14:36

回答

2

official Spring doc

WEB-INF/web.xml和WebApplicationInitializer使用不是相互排斥的;例如,web.xml可以註冊一個servlet,而WebApplicationInitializer可以註冊另一個。初始化程序甚至可以通過諸如ServletContext.getServletRegistration(String)之類的方法修改在web.xml中執行的註冊。但是,如果應用程序中存在WEB-INF/web.xml,則其版本屬性必須設置爲「3.0」或更高,否則Servlet容器將忽略ServletContainerInitializer引導程序。

所以,我解決了既WebApplicationInitializerSpringBootServletInitializer延伸WebApplicationInitializer)和web.xml

春天啓動的Java配置類:

@SpringBootApplication 
public class MyApplication extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(MyApplication.class); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(MyApplication.class, args); 
    } 

     //... 
} 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
metadata-complete="false" version="3.0"> 

    <display-name>My Awesome Application</display-name> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>My Awesome Resource Name</web-resource-name> 
      <url-pattern>/*</url-pattern> 
      <http-method>GET</http-method> 
      <http-method>POST</http-method> 
      <http-method>PUT</http-method> 
      <http-method>DELETE</http-method> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>myawesomerole</role-name> 
     </auth-constraint> 
    </security-constraint> 

    <login-config> 
     <auth-method>BASIC</auth-method> 
    </login-config> 

</web-app> 

參見:Using Tomcat Basic Auth with new WebApplicationInitializer