Ich habe eine Java-Webapp. Die Webapp ist als Kriegsdatei gepackt. Diese WAR-Datei erlaubt statische Inhalte, die direkt über HTTP übermittelt werden. Für Servlets in diesem Krieg kann ich eine HTTP-Authentifizierung machen (implementiere sie mit dem Servlet selbst). Aber ich möchte auch HTTP-Auth für den statischen Inhalt. Wie kann ich das erkennen?Wie kann ich in einer Java-Webapp (war) HTTP-Auth für statische Inhalte verwenden?
Antwort
Erstellen Sie eine Klasse, die javax.servlet.Filter implementiert. Siehe The Essentials of Filters
Die Hauptmethode ist doFilter, die die Objekte ServletRequest, ServletResponse und FilterChain übergeben wird. Dort erzwingen Sie die Authentifizierung.
Dann wird Ihr Filter in web.xml deklariert und ein Filter-Mapping wie folgt (Karten zu jeder Anfrage)
<filter>
<filter-name>Authentication Filter</filter-name>
<filter-class>
com.nfsdsystems.security.filters.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Setzen Sie Ihre statische HTML-Dateien in einem direcotry und definieren Sie Ihre Sicherheitseinschränkungen in Ihrem web.xml. Ordnen Sie die Abhängigkeiten der entsprechenden Rolle zu.
<security-constraint>
<display-name>securedResources</display-name>
<web-resource-collection>
<web-resource-name>securedRes</web-resource-name>
<url-pattern>/secured/*</url-pattern>
<http-method>GET</http-method>
<http-method>PUT</http-method>
<http-method>HEAD</http-method>
<http-method>TRACE</http-method>
<http-method>POST</http-method>
<http-method>DELETE</http-method>
<http-method>OPTIONS</http-method>
</web-resource-collection>
<auth-constraint>
<description>
authenticatedUser_securedRes</description>
<role-name>authenticatedUsed</role-name>
</auth-constraint>
</security-constraint>
Das wäre in der Tat der bevorzugte Weg, es mit Realms zu machen. – Nathan
Wie kann ich die Benutzernamen/Passwörter auf diese Weise definieren? – Mnementh
Es hängt von dem App-Server ab, den Sie verwenden. Für Tomcat, google "jdbc Realm-Konfiguration". Für Websphere wäre der bevorzugte Weg ldap. – svachon
Das funktioniert gut für mich. Ich habe meinen eigenen Filter geschrieben. – Mnementh