2013-09-04 14 views

risposta

2

Si dovrebbe dare un'occhiata a questo GitHub project. Questo è un Vaadin 7.1 + Spring 3.1.2.RELEASE + Progetto Spring-Vaadin 2.0.1. C'è anche un plugin per Jetty, ma puoi eseguirlo/distribuirlo anche in tomcat senza problemi.

+0

Grazie per la risposta, ho già utilizzare il progetto che hai menzionato, ma Non so perché quando inserisco le credenziali e clicco sul pulsante di accesso, vengo inoltrato alla stessa pagina di login e non all'interfaccia utente – rgaaray

0

Here è un piccolo progetto che integra Vaadin e Spring Security. È fatto in Scala, ma ovviamente funziona anche in Java. Il codice è here.

+0

Thnaks per la risposta, prendo visione del codice e provo a tradurlo in java, ma Non conosco scala quindi ho avuto un piccolo problema. Traduco quasi tutti, le uniche classi che ho un dubbio su come tradurle sono NavigationErrorHandlingStrategy e NavigatorFactory, puoi aiutarmi a tradurre queste due classi in java per favore? – rgaaray

+0

lol ... questo è proibitivamente complesso – specializt

7

Vaadin 7 si integra facilmente con Spring Security. È necessario configurare solo 2 file. Primo: web.xml e il secondo spring-security.xml (credenziali utente e impostazioni di sicurezza). Questo è un piccolo esempio su come utilizzare il modulo di base per l'autenticazione.

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0"> 
<display-name>Vaadin7SpringSecurity</display-name> 

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

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

<!-- filter declaration for Spring Security --> 
<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> 
</web-app> 

primavera-security.xml

<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.2.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="/*" access="ROLE_USER" /> 
</http> 

<authentication-manager> 
    <authentication-provider> 
    <user-service> 
     <user name="user" password="password" authorities="ROLE_USER" /> 
    </user-service> 
    </authentication-provider> 
</authentication-manager> 

</beans:beans> 

Per maggiori dettagli, come estendere la configurazione primavera-security.xml è possibile utilizzare Spring resources.

+1

Questo è buono ma cosa succede se voglio usare il modulo di login personalizzato? – Bourkadi

+1

in realtà è tutt'altro che "facile": ciò che stai mostrando è un'applicazione SPRING con SUPPORTO di Vaadin - ma in realtà la creazione di un'applicazione VAADIN con supporto SPRING SECURITY è ... un po 'difficile: https://vaadin.com/wiki? p_p_id = 36 & p_p_lifecycle = 0 & p_p_state = pop_up & p_p_mode = visualizza & _36_struts_action =% 2Fwiki% 2Fview & p_r_p_185834411_nodeName = vaadin.com + wiki & p_r_p_185834411_title = IV + - + Configurare + e + Usare + Vaadin + Spring + senza + Spring + Boot - scusa ma la tua risposta è valida solo per pochi casi molto limitati ... per le persone che vogliono usare vaadin CDI è un vero dolore per ottenere questo risultato – specializt

0

Ad riferimento l'esempio precedente utilizzando l'ultima primavera-sicurezza, ho incontrato i seguenti errori e fornire il mio soultions:

Error1

Context initialization failed 
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: You cannot use a spring-security-2.0.xsd or spring-security-3.0.xsd or spring-security-3.1.xsd schema or spring-security-3.2.xsd schema with Spring Security 4.0. Please update your schema declarations to the 4.0 schema. 

Si dovrebbe controllare la molla * Versione e aggiornare il tag di intestazione di spring-security.xml. Ad esempio: utilizzo spring-beans-4.1.6.RELEASE e spring-security-4.0.2.RELEASE. Quindi aggiorno come:

<beans:beans xmlns="http://www.springframework.org/schema/security" 
      xmlns:beans="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-4.0.xsd"> 

Error2

HTTP Status 500 - Failed to evaluate expression 'ROLE_USER' 
... 
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field 'ROLE_USER' cannot be found on object of type 'org.springframework.security.web.access.expression.WebSecurityExpressionRoot' - maybe not public? 
... 

Secondo sentori di questo resource, si dovrebbe rivedere intercetta-url tag come segue:

<intercept-url pattern="/**" access="hasRole('ROLE_USER')" /> 

Error3

HTTP Status 403 - Expected CSRF token not found. Has your session expired? 

Questo perché la sicurezza di primavera abilita la protezione CSRF per impostazione predefinita che è in conflitto con Vaadin.Si dovrebbe aggiungere un nuovo tag all'interno http:

<csrf disabled="true" /> 

Ecco la mia completa primavera-security.xml per riferimento:

<beans:beans xmlns="http://www.springframework.org/schema/security" 
      xmlns:beans="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-4.0.xsd"> 

    <http auto-config='true'> 
     <intercept-url pattern="/**" access="hasRole('ROLE_USER')" /> 
     <csrf disabled="true" /> 
    </http> 

    <authentication-manager> 
     <authentication-provider> 
      <user-service> 
       <user name="yourUsername" password="yourPassoword" authorities="ROLE_USER" /> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 

</beans:beans> 
Problemi correlati