2013-09-15 6 views
0

Я хочу добавить возможности Spring Security в свой проект GWT. Я решил сначала отладить его в простой программе GWT. Но каждый раз, когда я открыт веб-страницы я не получаю окно входа в систему, я получаю сообщение об ошибке:GWT & Spring Security

HTTP ERROR: 503 
SERVICE_UNAVAILABLE 
RequestURI=/Securitydemo.html 
Powered by jetty:// 

Есть мои конфиги:

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 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" 
     xmlns="http://java.sun.com/xml/ns/javaee"> 

    <!-- Servlets --> 
    <servlet> 
    <servlet-name>greetServlet</servlet-name> 
    <servlet-class>com.val.server.GreetingServiceImpl</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>greetServlet</servlet-name> 
    <url-pattern>/securitydemo/greet</url-pattern> 
    </servlet-mapping> 

    <!-- Default page to serve --> 
    <welcome-file-list> 
    <welcome-file>Securitydemo.html</welcome-file> 
    </welcome-file-list> 

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
    /WEB-INF/securitydemo-security.xml 
    /WEB-INF/securitydemo-base.xml 
    </param-value> 
</context-param> 

<listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 
</web-app> 

securitydemo-security.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/security 
      http://www.springframework.org/schema/security/spring-security-3.1.xsd 
    "> 

    <http auto-config="true"> 
     <intercept-url pattern="/*l" access="ROLE_USER"/> 
    </http> 

    <authentication-manager alias="authenticationManager"> 
     <authentication-provider> 
     <user-service> 
      <user authorities="ROLE_USER" name="guest" password="guest"/> 
     </user-service> 
     </authentication-provider> 
    </authentication-manager> 
</beans:beans> 

securitydemo-base.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
xmlns:context="http://www.springframework.org/schema/context" 

xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/jdbc 
     http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

<context:annotation-config /> 

</beans> 

Пожалуйста, скажите мне, что я сделал не так?

P.S. Эти ошибки и предупреждения из консоли:

Starting Jetty on port 8888 
    [WARN] Could not instantiate listener org.springframework.web.context.ContextLoaderListener 
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 
    at java.lang.ClassLoader.findClass(ClassLoader.java:522) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:352) 
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337) 
    at org.mortbay.jetty.handler.ContextHandler.loadClass(ContextHandler.java:1038) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initListener(WebXmlConfiguration.java:629) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initWebXmlElement(WebXmlConfiguration.java:367) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initialize(WebXmlConfiguration.java:289) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.configure(WebXmlConfiguration.java:222) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.configureWebApp(WebXmlConfiguration.java:180) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1217) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:468) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.Server.doStart(Server.java:222) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672) 
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509) 
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1093) 
    at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:836) 
    at com.google.gwt.dev.DevMode.main(DevMode.java:311) 
    [WARN] EXCEPTION 
java.lang.ClassNotFoundException: org.springframework.web.filter.DelegatingFilterProxy 
    at java.lang.ClassLoader.findClass(ClassLoader.java:522) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:352) 
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337) 
    at org.mortbay.util.Loader.loadClass(Loader.java:91) 
    at org.mortbay.util.Loader.loadClass(Loader.java:71) 
    at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73) 
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:81) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:593) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:468) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.Server.doStart(Server.java:222) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672) 
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509) 
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1093) 
    at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:836) 
    at com.google.gwt.dev.DevMode.main(DevMode.java:311) 
    [WARN] failed springSecurityFilterChain 
javax.servlet.UnavailableException: org.springframework.web.filter.DelegatingFilterProxy 
    at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:79) 
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:81) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:593) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:468) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.Server.doStart(Server.java:222) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672) 
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509) 
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1093) 
    at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:836) 
    at com.google.gwt.dev.DevMode.main(DevMode.java:311) 
    [WARN] Failed startup of context com.g[email protected]1073197{/,C:\Users\zigfridus\Dropbox\my\projects\workspace\securitydemo\war} 
javax.servlet.UnavailableException: org.springframework.web.filter.DelegatingFilterProxy 
    at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:79) 
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:81) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:593) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:468) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.Server.doStart(Server.java:222) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672) 
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509) 
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1093) 
    at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:836) 
    at com.google.gwt.dev.DevMode.main(DevMode.java:311) 
+0

HTTP 503 не говорит слишком много. Вы, вероятно, получите дополнительную помощь, если расскажете нам о конкретном исключении, которое было отправлено в ответ на запрос. Проверьте журналы на стороне сервера и отредактируйте свой вопрос, чтобы включить исключение, которое вы там видите (желательно с помощью stacktrace). – zagyi

+0

Я добавил ошибки с консоли. @zagyi, пожалуйста, взгляните на них. – zigfridus

ответ

1

EDIT

Просто убедитесь, что у вас есть соответствующие библиотеки на вашем пути к классам ...

ПРЕДЫДУЩИЙ ОТВЕТ

Do вы хотите, чтобы логин был отделен от приложения GWT?

Если да, то как насчет создания страницы JSP для входа и сервлета для ее обработки?

Вот конфигурация Spring для этого.

<http auto-config="false" use-expressions="true"> 
    <intercept-url pattern="/login" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" /> 
    <form-login login-page="/login" authentication-failure-url="/login" /> 
    <logout logout-url="/logout" /> 
    <session-management 
     session-authentication-error-url="/login" 
     session-fixation-protection="newSession"> 
     <concurrency-control max-sessions="1" 
      error-if-maximum-exceeded="true" /> 
    </session-management> 
    </http> 

Вы также, возможно, потребуется аутентификацией успеха обработчик-реф в вашем <form-login> тег для того, чтобы перенаправить пользователя в приложение GWT, когда он проверяет подлинность.

Второй способ сделать это - обработать логин на уровне GWT и установить контекст безопасности вручную. Если это вариант, который вы выбрали, скажите мне, и я отправлю образцы кода.

+0

Я собираюсь хранить логины и пароли в MySql. Но на данный момент я просто хочу увидеть окно входа в систему. Позже я буду очень благодарен, если вы разместите мне несколько примеров кода GWT. Я изменил свой код, я заменил свой тег http твой, но, к сожалению, это не помогло. Я забыл добавить ошибки с консоли, теперь я это сделал. – zigfridus

+0

Просто проверьте, что у вас есть соответствующие библиотеки в вашем пути к классам ... У вас есть этот? org.springframework spring-context otonglet

+0

Большое спасибо за помощь. На самом деле у меня не было org.springframework: org.springframework.web library.Также у меня были проблемы с разработкой в ​​Eclipse. Поэтому я решил перенести свой проект на Intellij Idea. После этого все мои проблемы исчезли. – zigfridus

Смежные вопросы