Jetty No LoginService 异常

问题描述

我启动jetty,报下面异常:2011-08-24 10:34:22.799:INFO::jetty-7.2.2.v20101205 2011-08-24 10:34:28.665:WARN::FAILED org.eclipse.jetty.security.ConstraintSecurityHandler@17ec9f7: java.lang.IllegalStateException: No LoginService for org.eclipse.jetty.security.authentication.BasicAuthenticator@3b1f38 in org.eclipse.jetty.security.ConstraintSecurityHandler@17ec9f7 2011-08-24 10:34:28.665:WARN::FAILED org.eclipse.jetty.server.session.SessionHandler@fd918a: java.lang.IllegalStateException: No LoginService for org.eclipse.jetty.security.authentication.BasicAuthenticator@3b1f38 in org.eclipse.jetty.security.ConstraintSecurityHandler@17ec9f7 2011-08-24 10:34:28.665:WARN::Failed startup of context o.e.j.w.WebAppContext{/,file:/E:/workspace/sms/WebRoot/} java.lang.IllegalStateException: No LoginService for org.eclipse.jetty.security.authentication.BasicAuthenticator@3b1f38 in org.eclipse.jetty.security.ConstraintSecurityHandler@17ec9f7 at org.eclipse.jetty.security.authentication.LoginAuthenticator.setConfiguration(LoginAuthenticator.java:45) at org.eclipse.jetty.security.SecurityHandler.doStart(SecurityHandler.java:335) at org.eclipse.jetty.security.ConstraintSecurityHandler.doStart(ConstraintSecurityHandler.java:228) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:93) at org.eclipse.jetty.server.handler.ScopedHandler.doStart(ScopedHandler.java:97) at org.eclipse.jetty.server.session.SessionHandler.doStart(SessionHandler.java:114) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:93) at org.eclipse.jetty.server.handler.ScopedHandler.doStart(ScopedHandler.java:97) at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:630) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:228) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1181) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:584) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:496) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:93) at org.eclipse.jetty.server.Server.doStart(Server.java:243) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) at util.OneWebAppUnassembled.main(OneWebAppUnassembled.java:21) 结果我将下面这两行代码加上在执行便没有问题了: HashLoginService dummyLoginService = new HashLoginService("TEST-SECURITY-REALM"); webAppCtx.getSecurityHandler().setLoginService(dummyLoginService); 有些web应用在我当前jetty下是可以正常运行的,但我部署另一个web应用就会出现上面的异常,我现在没搞清楚是什么原因导致的,还有这两句代码都做了什么事情实现了什么功能,妄解答!谢谢问题补充:对于一个web容器,为什么会出现有些web应用可以正常运行,有些则不可以,对于jetty嵌入到应用中,需要实现哪些方面功能,才能得以支持所有的web应用! 问题补充:Wind_ZhongGang 写道

解决方案

<Configure id="Server" class="org.eclipse.jetty.server.Server"> <New id="ServerLog" class="java.io.PrintStream"> <Arg> <New class="org.eclipse.jetty.util.RolloverFileOutputStream"> <Arg><Property name="jetty.logs" default="/var/log/jetty"/>/yyyy_mm_dd.stderrout.log</Arg> <Arg type="boolean">false</Arg> <Arg type="int">30</Arg> <Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT</Arg></Call></Arg> <Get id="ServerLogName" name="datedFilename"/> </New> </Arg> </New> <Call class="org.eclipse.jetty.util.log.Log" name="info"><Arg>Redirecting stderr/stdout to <Ref id="ServerLogName"/></Arg></Call> <Call class="java.lang.System" name="setErr"><Arg><Ref id="ServerLog"/></Arg></Call> <Call class="java.lang.System" name="setOut"><Arg><Ref id="ServerLog"/></Arg></Call> </Configure>你将这段配置,转成java代码的方式应该就可以了。比如上面的<Configure id="Server" class="org.eclipse.jetty.server.Server"> 相当于new Server()<New id="ServerLog" class="java.io.PrintStream"> 相当于new PrintStream,<Arg>部分就是构造函数的参数。其他的都是类似,你可以这样把xml翻译成java代码。
解决方案二:
正确,将配置文件中的信息转换成java代码。
解决方案三:
Server server = new Server(8080);HandlerCollection collection = new HandlerCollection();collection.addHandler(handler);RequestLogHandler logHandler = new RequestLogHandler();NCSARequestLog log = new NCSARequestLog();log.setFilename("target/request.log");//log.setAppend(true);logHandler.setRequestLog(log);collection.addHandler(logHandler);server.setHandler(collection);server.start();楼上的做法是对的,不过这样只能记录请求的日志,至于jetty服务器启动本身的日志输出,这个还是通过外部日志系统完成的,就如果我们webapp里面要输出日志,需要配置log4j一样,内置的jetty也是一个app,做法类似。
解决方案四:
<Set name="handler"> <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"> <Set name="requestLog"><New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog"> <Set name="filename"><Property name="jetty.logs" default="./logs"/>/test-yyyy_mm_dd.request.log</Set> <Set name="filenameDateFormat">yyyy_MM_dd</Set> <Set name="append">true</Set> <Set name="LogTimeZone">GMT</Set></New> </Set> </New> </Set>在你的配置文件中添加这样的配置,或都以应用程序的形式实现NCSARequestLog log=new NCSARequestLog();log.setFilename();log.setFilenameDateFormat();log.setAppend();log.setLogTimeZone();RequestLogHandler logHandler=new RequestLogHandler();logHandler.setRequestLog(log);
解决方案五:
引用但是我想问问:嵌入到应用中的jetty容器,是不是在代码中需要对应的代码功能jetty.xml中的相应的配置内容的功能呢?那这么的属性应该如何完成呢?如果是嵌入式的可以直接在代码中增加:HashUserRealm myrealm = new HashUserRealm("MyRealm",System.getProperty("jetty.home")+"/etc/realm.properties");server.setUserRealms(new UserRealm[]{myrealm});这个是jetty 6的写法,jetty 7的写法你上面已经有了。如果是在jetty.xml里面配置的话,可以这样:<Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/test</Set> <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test</Set> <Get name="securityHandler"> <Set name="loginService"> <New class="org.eclipse.jetty.security.HashLoginService"> <Set name="name">Test Realm</Set> <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set> </New> </Set> </Get> </Configure>参考:http://wiki.eclipse.org/Jetty/Tutorial/Realms
解决方案六:
不熟悉,不过给你推荐一篇文章 http://blog.csdn.net/lovingprince/article/details/6364767
解决方案七:
看看jetty安装文件夹下的etc文件中的realm.properties文件。jetty: MD5:164c88b302622e17050af52c89945d44,useradmin: CRYPT:adpexzg3FUZAk,server-administrator,content-administrator,adminother: OBF:1xmk1w261u9r1w1c1xmq,userplain: plain,useruser: password,userdigest: MD5:6e120743ad67abfbc385bc2bb754e297,user
解决方案八:
并不像你想像中的那么大,主要使用的就是配置文件中提及的几个类,至于set get都是这些类中的方法而已,只要你设置了正确的属性,那么启动就没有问题。jetty本身就很小,想要使用配置文件或是在应用程序中编程实现都是很容易的事情。这还要取决于你的需求有多大。了解了配置文件中怎么启动的服务器,你就会相应了解在应用程序中应该怎么编程实现了。
解决方案九:
我刚才测试了一下,如果你在web.xml里增加了下面的配置,那么jetty启动的时候就会报No LoginService的错误:<security-constraint> <web-resource-collection> <web-resource-name>A Protected Page</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> <role-name>user</role-name> <role-name>moderator</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>MyRealm</realm-name> </login-config>不知道你的web应用里面是否也有这些配置。
解决方案十:
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"><Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/template</Set> <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/Template.war</Set> <Set name="extractWAR">true</Set> <Set name="copyWebDir">false</Set> <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set> <Get name="securityHandler"> <Set name="loginService"> <New class="org.eclipse.jetty.security.HashLoginService"> <Set name="name">Test Realm</Set> <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set> </New> </Set> <Set name="checkWelcomeFiles">true</Set> </Get></Configure>不知道楼主是否对jetty安装文件下的context文件里的配置文件有所研究,如果想要在jetty中部署你的web应用程序,需要增加这样的配置文件,如果不想使用配置文件而想嵌入应用程序中,也应该实现配置文件中所需要的最少步骤。从配置文件中可以看出,在jetty中启动一个web应用程序是从WebAppContext类开始的,其中需要配置它的属性,如启动时的地址,启动时的war包的位置,还有就是配置securityHandler中的loginService。这些配置相应的也就能够体现在你的java程序中了。

时间: 2024-10-27 05:40:18

Jetty No LoginService 异常的相关文章

主流web容器(jetty,tomcat,jboss)的classloader机制对比和相关问题分析

背景      前段时间一直在做应用容器的迁移,将公司的应用容器从jboss,tomcat统一迁移到jetty.在整个迁移过程中遇到最多的潜在问题还是在classloader机制上,这里记录一下希望能对大家有所帮助,避免重复走弯路.   啥都不说,先来看下遇到的几个问题,比较纠结的问题. 问题1: (jar sealed问题) 1.Caused by: java.lang.SecurityException: sealing violation: package com.sun.media.ja

启动jetty时异常(jetty7+eclipse-indigo+maven3)

问题描述 启动jetty时异常(jetty7+eclipse-indigo+maven3)使用:Eclipse Jetty Launcher Site - http://eclipse-jetty.sourceforge.net/update/ 集成jetty7异常如下:Launching Jetty with port 8080, context / and webapp path src/main/webappException in thread "main" java.lang

bae中action跳转jsp出现异常

问题描述 bae中action跳转jsp出现异常 我的那个项目在本机上测试时action跳转jsp可以跳转, 在bae上面就出现 HTTP ERROR 404 Problem accessing /stuinfo.action. Reason: result 'null' not found Powered by Jetty:// 我的struts2配置文件为 /success.jsp

深入Jetty源码之Servlet框架及实现(AsyncContext、RequestDispatcher、HttpSession)

概述 Servlet是Server Applet的缩写,即在服务器端运行的小程序,而Servlet框架则是对HTTP服务器(Servlet Container)和用户小程序中间层的标准化和抽象.这一层抽象隔离了HTTP服务器的实现细节,而Servlet规范定义了各个类的行为,从而保证了这些"服务器端运行的小程序"对服务器实现的无关性(即提升了其可移植性).在Servlet规范有以下几个核心类(接口):ServletContext:定义了一些可以和Servlet Container交互的

Jetty超时过期,checkIdleTimeout方法抛出的

问题描述 Jetty超时过期,checkIdleTimeout方法抛出的 各位:求助~ 我在用jetty+cometd做comet服务,continuation机制已经加入,但是日志中出现了这样的异常 java.util.concurrent.TimeoutException: Idle timeout expired: 40002/40000 ms at org.eclipse.jetty.io.IdleTimeout.checkIdleTimeout(IdleTimeout.java:153

深入Jetty源码之Connection

概述 当Jetty中的Connector收到一个客户端的连接时(ServerSocket或ServerSocketChannel的accept()方法返回),Connector会首先创建一个ConnectedEndPoint用于和连接的底层(Socket.Channel)打交道(读写数据),在创建的ConnectedEndPoint时会同时使用该EndPoint创建相应类型的Connection,然后会创建一个Task仍给线程池,最终线程池会启动一个线程启动这个Task,而在这个Task中调用C

maven项目使用jetty启动,启动失败,请大神帮忙看看

问题描述 maven项目使用jetty启动,启动失败,请大神帮忙看看 14:50:16.256 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'webMapperScannerConfigurer'2015-07-08 14:50:16.535:WARN::Failed startup of context org.mortbay.jetty.webapp.WebApp

深入Jetty源码之Handler总述

Handler概述 Handler是Jetty中的核心接口,它用于处理所有连接以外的逻辑,比如对Servlet框架的实现,以及用户自定义的Handler等,它继承自LifeCycle和Destroyable接口,只有一个主要方法:handle,包含Request和Response实例.在深入Jetty源码之Connection中有写道在HttpConnection的handleRequest()方法中会最终调用Server的handle()或handleAsync()方法,并且传入HttpCon

spring mvc-我用springMVC写了一个web项目,加载到tomcat8上后启动出现此异常,请懂得的来帮忙看下

问题描述 我用springMVC写了一个web项目,加载到tomcat8上后启动出现此异常,请懂得的来帮忙看下 异常信息如下: 严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/spring_mvc]] at or