2013-09-04 41 views

Trả lời

2

Bạn nên có một cái nhìn về điều này GitHub project. Đây là Vaadin 7.1 + Mùa xuân 3.1.2.RELEASE + Dự án tích hợp Spring-Vaadin 2.0.1. Ngoài ra còn có một plugin Jetty bên trong, nhưng bạn có thể chạy/triển khai nó cũng trong tomcat mà không có vấn đề.

+0

Cám ơn câu trả lời của bạn, tôi đã sử dụng các dự án mà bạn đề cập nhưng Tôi không biết tại sao khi tôi nhập thông tin đăng nhập và nhấp vào nút đăng nhập, tôi được chuyển tiếp tới cùng một trang đăng nhập và không chuyển đến giao diện người dùng – rgaaray

0

Here là một dự án nhỏ tích hợp Vaadin và Spring Security. Nó được thực hiện trong Scala, nhưng rõ ràng là hoạt động trong Java. Mã số là here.

+0

Thnaks cho câu trả lời của bạn, tôi kiểm tra mã và tôi cố dịch nó sang java, nhưng Tôi không biết scala nên tôi có một chút rắc rối. Tôi dịch gần như tất cả, các lớp học duy nhất tôi có một nghi ngờ làm thế nào để dịch chúng là NavigationErrorHandlingStrategy và NavigatorFactory, bạn có thể giúp tôi dịch hai lớp này để java xin vui lòng? – rgaaray

+0

lol ... thats cực kỳ phức tạp – specializt

7

Vaadin 7 dễ tích hợp với Spring Security. Bạn chỉ nên định cấu hình 2 tệp. Đầu tiên - web.xml và tệp thứ hai spring-security.xml (thông tin xác thực người dùng và cài đặt bảo mật). Đây là ví dụ nhỏ về cách sử dụng biểu mẫu cơ sở để xác thực.

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> 

mùa xuân-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> 

Để biết thêm chi tiết, làm thế nào để mở rộng mùa xuân-security.xml cấu hình mà bạn có thể sử dụng Spring resources.

+1

Điều đó tốt nhưng nếu tôi muốn sử dụng biểu mẫu đăng nhập tùy chỉnh thì sao? – Bourkadi

+1

thực sự xa của nó là "dễ" - những gì bạn đang hiển thị là một ứng dụng SPRING với sự hỗ trợ vaadin - nhưng thực sự xây dựng một ứng dụng VAADIN với hỗ trợ bảo mật SPRING là ... hơi khó: https://vaadin.com/wiki? p_p_id = 36 & p_p_lifecycle = 0 & p_p_state = pop_up & p_p_mode = view & _36_struts_action =% 2Fwiki% 2Fview & p_r_p_185834411_nodeName = vaadin.com + wiki & p_r_p_185834411_title = IV + - + Cấu hình + và + Sử dụng + Vaadin + Spring + mà không cần + Spring + Boot - xin lỗi nhưng câu trả lời của bạn chỉ hợp lệ cho một vài trường hợp rất hạn chế ... đối với những người muốn sử dụng vaadin CDI một nỗi đau thực sự của nó để có được điều này – specializt

0

Đối chiếu các ví dụ trên bằng cách sử dụng vào mùa xuân-bảo mật mới nhất, tôi gặp phải các lỗi sau đây và cung cấp soultions tôi:

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. 

Bạn nên kiểm tra spring- * Phiên bản của bạn và cập nhật thẻ tiêu đề của spring-security.xml. Ví dụ: tôi sử dụng spring-beans-4.1.6.RELEASEspring-security-4.0.2.RELEASE. Vì vậy, tôi cập nhật nó như:

<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? 
... 

Theo gợi ý của resource này, bạn nên xem xét lại chặn-url thẻ như sau:

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

Lỗi3

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

Đó là vì bảo mật mùa xuân cho phép bảo vệ CSRF theo mặc định xung đột với Vaadin.Bạn nên thêm một thẻ mới bên http:

<csrf disabled="true" /> 

Dưới đây là hoàn chỉnh của tôi mùa xuân-security.xml để tham khảo:

<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> 
Các vấn đề liên quan