You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@shiro.apache.org by James Whetstone <ja...@comcast.net> on 2011/07/09 09:53:27 UTC
Runtime error in web app
I've built an example web app using maven that is dying during
initialization and I can't figure out how to address the error.
I'm using jetty 7.4.2 and Shiro 1.1.0. My example app is using jetty
embedded.
My project compiles but when I try to run it, I get some errors:
2011-07-09 00:38:26.390:INFO::jetty-7.4.2.v20110526
2011-07-09 00:38:26.577:INFO::NO JSP Support for /, did not find
org.apache.jasper.servlet.JspServlet
2011-07-09 00:38:26.624:INFO::started
o.e.j.w.WebAppContext{/,file:/C:/JettyMavenHelloWarApp/src/main/webapp/}
2011-07-09 00:38:26.640:WARN::FAILED ShiroFilter:
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
2011-07-09 00:38:26.640:WARN::FAILED
o.e.j.w.WebAppContext{/,file:/C:/JettyMavenHelloWarApp/src/main/webapp/}:
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
2011-07-09 00:38:26.640:WARN::FAILED
org.eclipse.jetty.server.handler.HandlerList@1b70f9e:
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
2011-07-09 00:38:26.765:INFO::Started SelectChannelConnector@0.0.0.0:80
STARTING
2011-07-09 00:38:27.140:INFO::Started SslSelectChannelConnector@0.0.0.0:443
STARTING
2011-07-09 00:38:27.155:WARN::FAILED org.eclipse.jetty.server.Server@739aa3:
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.422s
[INFO] Finished at: Sat Jul 09 00:38:27 PDT 2011
[INFO] Final Memory: 7M/17M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.1:java
(default-cli) on project hello-world: An exception occured while executing
the Java class. null: InvocationTargetException: org/slf4j/
LoggerFactory: org.slf4j.LoggerFactory -> [Help 1]
Here is the contents of my pom.xml file:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>hello-world</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Jetty HelloWorld</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jettyVersion>7.4.2.v20110526</jettyVersion>
<slf4j.version>1.6.1</slf4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jettyVersion}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jettyVersion}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution><goals><goal>java</goal></goals></execution>
</executions>
<configuration>
<mainClass>org.example.AppServer</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
and here is my web.xml file:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>org.example.HelloServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>org.example.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>Recovery</servlet-name>
<servlet-class>org.example.RecoveryServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Recovery</servlet-name>
<url-pattern>/recovery</url-pattern>
</servlet-mapping>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>
# The IniShiroFilter configuration is very powerful and
flexible, while still remaining succinct.
# Please read the
org.apache.shiro.web.servlet.IniShiroFilter JavaDoc for information.
# Quick Tip: Instead of having this configuration here in
web.xml, you can instead
# move all of this to a 'shiro.ini' file at the root of the
classpath and remove
# the 'config' init-param. Or you can specify the
'configPath' init-param and specify the
# path to a resource at any location (url, file or
classpath). This may be desired if the
# config gets long and you want to keep web.xml clean.
[users]
# format: username = password, role1, role2, ..., roleN
root = secret,admin
guest = guest,guest
presidentskroob = 12345,president
darkhelmet = ludicrousspeed,darklord,schwartz
lonestarr = vespa,goodguy,schwartz
[roles]
# format; roleName = permission1, permission2, ...,
permissionN
admin = *
schwartz = lightsaber:*
goodguy = winnebago:drive:eagle5
[filters]
shiro.loginUrl = /index.html
[urls]
# The /login is not restricted to authenticated users
(otherwise no one could log in!), but
# the 'authc' filter must still be specified for it so it
can process that url's
# login submissions. It is 'smart' enough to allow those
requests through as specified by the
# shiro.loginUrl above.
/index.html = authc
/account/** = authc
/remoting/** = authc, roles[b2bClient],
perms["remote:invoke:lan,wan"]
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Lastly, here is my main java file "AppServer.java":
package org.example;
import org.eclipse.jetty.http.ssl.SslContextFactory;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
import org.eclipse.jetty.webapp.WebAppContext;
public class AppServer
{
public static void main(String[] args) throws Exception
{
Server server = new Server();
SelectChannelConnector connector0 = new SelectChannelConnector();
connector0.setPort(80);
connector0.setMaxIdleTime(30000);
connector0.setRequestHeaderSize(8192);
SslSelectChannelConnector ssl_connector = new SslSelectChannelConnector();
String jetty_home =
System.getProperty("jetty.home","C:/jetty-hightide-7.4.2.v20110526");
System.setProperty("jetty.home",jetty_home);
ssl_connector.setPort(443);
SslContextFactory cf = ssl_connector.getSslContextFactory();
cf.setKeyStore(jetty_home + "/etc/keystore");
cf.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
cf.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
server.setConnectors(new Connector[]{ connector0, ssl_connector });
WebAppContext context = new WebAppContext();
context.setDescriptor("/WEB-INF/web.xml");
context.setResourceBase("../JettyMavenHelloWarApp/src/main/webapp");
context.setContextPath("/");
context.setParentLoaderPriority(true);
context.setInitParameter("cacheControl","max-age=0,public");
ResourceHandler resource_handler = new ResourceHandler();
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(new String[]{ "index.html" });
resource_handler.setResourceBase(".");
resource_handler.setCacheControl("max-age=0,public");
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { context, resource_handler, new
DefaultHandler()});
server.setHandler(handlers);
server.start();
server.join();
}
}
I've tried just about everything I can think of to fix this issue, but
nothing has worked so far.
---James