2011-12-26 2 views
1

В моем действительном логическом приложении GWT я использую серверный сервер XMPP для аутентификации комбинации Username-Password с сервера, а ответ - идентификатор соединения, отправленный обратно через механизм входа в RPC.Интеграция GWT и Spring Security

Однако я создал новую базу данных «Пользователь» (которая совместно используется сервером XMPP), в которой хранится информация о пользователе и используется как часть для аутентификации имени пользователя и пароля с помощью Spring Security;

Любой может использовать фрагмент кода для GWT + Spring Security, логин/код выхода?

ответ

2

Я использую код из этой статьи: http://www.javacodegeeks.com/2010/12/securing-gwt-apps-with-spring-security.html

В принципе, вы реализуете интерфейс Spring

org.springframework.security.authentication.AuthenticationProvider 

, который имеет проверку подлинности (Authentication) метод. Вы получаете имя пользователя и пароль, введенный пользователем внутри этого метода с:

String username = (String) authentication.getPrincipal(); 
String password = (String) authentication.getCredentials(); 
// now try to get the user from your DB 
User user = db.getUser(username, password); 

и в вашем контексте Spring, настройки фильтра Spring Security (см ссылку) и объявить AuthenticationProvider:

<bean id="authProvider" class="com.example.security.MyAuthenticationProvider" /> 

<security:authentication-manager alias="authenticationManager"> 
    <security:authentication-provider ref="authProvider" /> 
</security:authentication-manager> 

Я вообще не использую GWT для регистрации пользователя на ... просто странице JSP ... вы можете увидеть примерную страницу входа JSP (и ссылку для выхода) here Когда пользователь входит в систему, приложение GWT загружается. Для выхода из системы, просто сделать что-то вроде:

RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "/j_spring_security_logout"); 
try { 
    rb.sendRequest(null, new RequestCallback() { 
     public void onResponseReceived(Request request, Response response) { 
      GWT.log("Logged user out: " + response.getStatusText()); 
     } 
     public void onError(Request request, Throwable caught) { 
      // try to recover somehow 
     } 
    }); 
} catch (RequestException re) { 
    someOtherLogoutMechanism(); 
} 
0

Мои конфигурации следующим образом. Я использую приложение GWT

в моем JSP

<form name="login" action="<c:url value="j_spring_security_check"/>" method="POST"> 

в моей web.xml

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

в моей welcome.jsp

<sec:authorize ifAnyGranted="<%=gRoles%>">  
    <meta http-equiv="REFRESH" content="0; url=demoApp/demoApp.jsp"> 
</sec:authorize> 

весна-security.xml

<http auto-config="false" access-denied-page="/login.jsp?error=Access%20Denied"> 
    <intercept-url pattern="/login.jsp*" filters="none" /> 
    <intercept-url pattern="/demoApp/**" access="${app.roles}" /> 

    <form-login login-page="/login.jsp" 
       default-target-url="/welcome.jsp" 
       always-use-default-target="true" 
       authentication-failure-url="/login.jsp?error=true" /> 
    <logout logout-success-url="/login.jsp"/> 
    <anonymous/> 

Обратите внимание, что здесь используется образец безопасности на основе формы. Вы можете использовать security: jdbc-user-service для подключения к БД для аутентификации.

см. Образец here

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