Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Разделение прав после аутентификации


Автор: Egorik789 13.7.2011, 06:57
Всем привет! Очень нужна помощь. Делаю обычное web приложение с использованием GWT. Проблема вот в чем. 
Аутентификацию делаю стандартными средствами сервера Tomcat, настраиваю JDBCRealm к Oracle в server.xml, 
создаю таблицы в БД, далее настраиваю web.xml, указываю что это Form аутентификация. В общем все работает. 
Мне нужно сделать разделение интерфейса, по ролям. То есть определяю текущую роль этого пользователя и 
запускается нужный класс. Обработку можно сделать на сервере или лучше сразу на клиенте. Если это был бы 
обычный сервелет то вызвал бы методы getUserPrincipal, getCallerPrincipal, isUserInRole(), isCallerInRole(). 
В данном случае это не актуально. Как можно сделать разделение по ролям..?
Привожу код.
Стандартный MainEntryPoint.java в пакете клиента
Код

package org.yournamehere.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;

/**
 * Main entry point.
 *
 * @author 777
 */
public class MainEntryPoint {

    public void onModuleLoad() {
        final Label label = new Label("Hello, GWT!!!");
        final Button button = new Button("Click me");
        button.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                label.setVisible(!label.isVisible());
            }
        });

        RootPanel.get().add(button);
        RootPanel.get().add(label);
        }
}

server.xml (привожу только то что изменил)
Код

<Realm className="org.apache.catalina.realm.JDBCRealm" connectionName="system" connectionPassword="777" 
connectionURL="jdbc:oracle:thin:@777-3c828e8522a:1521:XE" driverName="oracle.jdbc.driver.OracleDriver" roleNameCol="role_name" 
userCredCol="user_pass" userNameCol="user_name" userRoleTable="user_roles" userTable="users"/>

web.xml
Код

<welcome-file-list>
        <welcome-file>welcomeGWT.html</welcome-file>
    </welcome-file-list>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>WebApplication1</web-resource-name>
            <url-pattern>/welcomeGWT.html</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>Role1</role-name>
        </auth-constraint>
    </security-constraint>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>WebApplication1</web-resource-name>
            <url-pattern>/welcomeGWT.html</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>Role2</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/LoginForm.html</form-login-page>
            <form-error-page>/LoginError.html</form-error-page>
        </form-login-config>
    </login-config>

LoginForm.html
Код

<body>
    <form method="POST" action="j_security_check">

  Username: <input type="text"     name="j_username"><br/>
  <br>
  Password: <input type="password" name="j_password"><br/>
  <br />

  <input type="submit" value="Login">
  <input type="reset"  value="Reset">

</form>
  </body>

Автор: Stolzen 13.7.2011, 11:19
Можно использовать Spring для этого
Вот нашел интересный пример -  https://bitbucket.org/gardellajuanpablo/gwt-sample/src 
Помимо интеграции spring+gwt есть еще парочку интересных вещей
Запуск - mvn gwt:run

И тут можно поглядеть http://stackoverflow.com/questions/1349938/gwt-and-authentication и тут http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)