Ich versuche Spring Security in mein Webprojekt einzubinden. Ich folge diesem Tutorial http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld.html
Ich habe alles im Tutorial mit dem angegebenen Maven-Projekt gemacht und funktioniert gut. Wenn ich jedoch versuche, es in mein Projekt aufzunehmen, wird ein Kompilierungsfehler angezeigt. Insbesondere wenn i von AbstractSecurityWebApplicationInitializer
ausgeht, wird der angegebene Fehler angezeigt
Mehrere Marker in dieser Zeile
- Der Typ javax.servlet.ServletContext kann nicht aufgelöst werden. Es wird indirekt auf erforderliche .class-Dateien verwiesen
- Der Typ javax.servlet.ServletException kann nicht aufgelöst werden. Es wird indirekt auf erforderliche .class-Dateien verwiesen
Die POM.xml
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spring.primefaces</groupId>
<artifactId>primefaces.testwebapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringPrimefacesWebApp</name>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- JSF 2.2 core and implementation -->
<dependency>
<groupId>com.Sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.Sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.11</version>
</dependency>
<!-- Prime Faces -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>5.2</version>
</dependency>
<!-- Spring security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.1.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Danke für die Hilfe!
Verwenden von mvn clean install -U
Fügen Sie einfach die javax.servlet
-API zu den Abhängigkeiten der Kompilierzeit hinzu. Sie müssen es nicht in den Build einschließen, es wird bereits vom Zielservlet-Container bereitgestellt.
Ihr aktuelles Pom legt nahe, dass Sie die Bereitstellung in einem Barebones-Servlet-Container ( Tomcat , Jetty usw.) anstelle eines vollwertigen Java EE-Anwendungsservers ( WildFly , TomEE , GlassFish , Liberty etc usw., sonst hätten Sie Probleme mit dem Klassenladen gehabt, indem Sie JSF zusammen mit der Webanwendung bereitstellen, anstatt den vom Container bereitgestellten zu verwenden.
In diesem Fall sollte das Hinzufügen der folgenden Abhängigkeit für einen Servlet 3.1 Container wie Tomcat 8 gelten:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
Wenn Sie tatsächlich einen älteren Servlet 3.0 Container wie Tomcat 7 anvisieren, ändern Sie <version>
in 3.0.1
(Hinweis: Es gibt keinen 3.0
aufgrund eines Fehlers auf ihrer Seite).
Wenn Sie tatsächlich auf einem Java EE 7 Anwendungsserver wie WildFly 8 implementieren, verwenden Sie stattdessen die folgende Abhängigkeit. Es deckt die gesamte Java EE-API ab, einschließlich javax.servlet
(und javax.faces
), sodass Sie diese individuellen JSF-API/impl-Abhängigkeiten entfernen.
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
Wenn Sie einen älteren Java EE 6 Anwendungsserver wie JBoss AS 7 als Ziel verwenden, ändern Sie auch hier <version>
in 6.0
.
Dies funktionierte für mich: Wenn die oben angegebene Lösung nicht funktioniert Projekt> Eigenschaften> Java-Erstellungspfad> Bibliotheken> Bibliothek über Bibliothek hinzufügen> Serverlaufzeit auswählen> Weiter> Apache Tomcat v 7.0 wählen> Fertig stellen> OK
stellen Sie das aktualisierte übergeordnete Element folgendermaßen ein:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.6.RELEASE</version>
<relativePath></relativePath>
</parent>
das für mich gelöst.
Was für mich geholfen hat, war das Löschen des Repositorys im Verzeichnis .m2 .__