Im new su sicurezza vaadin e spring, voglio sapere se qualcuno ha un esempio completo di vaadin 7.1 + spring-security integration in esecuzione in un server tomcat (non in molo).Vaadin 7.1 + Spring-Security Integration in esecuzione in Tomcat Server
risposta
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.
Here è un piccolo progetto che integra Vaadin e Spring Security. È fatto in Scala, ma ovviamente funziona anche in Java. Il codice è here.
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
lol ... questo è proibitivamente complesso – specializt
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.
Questo è buono ma cosa succede se voglio usare il modulo di login personalizzato? – Bourkadi
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
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>
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