1 / 23

Подключение базы данных

Подключение базы данных. Аутоидентификация и авторизация через БД. Системы управления базами данных. H2 Derby HSQLDB MySQL PostgreSQL Oracle. Java Database Connectivity (JDBC). Платформенно-независимый механизм работы с базами данных из java Входит в состав Java SE

telyn
Download Presentation

Подключение базы данных

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Подключение базы данных Аутоидентификацияи авторизация через БД

  2. Системы управления базами данных • H2 • Derby • HSQLDB • MySQL • PostgreSQL • Oracle

  3. JavaDatabaseConnectivity(JDBC) • Платформенно-независимый механизм работы с базами данных из java • Входит в состав Java SE • Позволяет создавать соединение с БД по специальному url • Для применения необходим соответствующий драйвер БД (драйвер часто подгружается динамически)

  4. Пример работы с JDBC В данном случае используется драйвер для подключения к MySQL (com.mysql.jdbc.driver) Обработка результата запроса происходит в методе writeResultSet(resultSet)

  5. Вызов функций БД через JDBC • Вызов хранимых процедур в jdbcпредполагает знание сигнатуры функции • Использование хранимых процедур позволяет отделить логику данных от логики приложения Stringprocedure="{? = call CREATE_A_PERSON (?)}"; CallableStatementstatement=conn.prepareCall(procedure); statement.registerOutParameter(1, java.sql.Types.STRUCT, "UDO_PERSON"); statement.setString(2, "YOURE NAME");statement.execute(); ResultSetresults=(ResultSet)proc.getObject(1);

  6. Подготовка • Подключение базы данных и jvmосуществляется через специальные java классы (JDBC Driver) • Также необходимо иметь запущенную СУБД • Не забудьте скопировать JDBC Driver jar в%CATALINA_HOME%/lib

  7. Инициализация пула подключений %PROJECT_DIR%/web/META-INF/context.xml jdbc driver jdbcurlСУБД Для MySqljdbc:mysql://localhost:3306/storage maxActive – максимальное число активных соединений в пуле maxIdel– максимальное число неактивных соединений maxWait– максимальное время ожидания соединения Значение -1 везде означает отсутствие ограничения

  8. Подключение базы данных в приложение %PROJECT_DIR%/web/WEB-INF/web.xml Res-ref-name– должен совпадать с именем ресурса в контексте

  9. Как достать соединение Забираем ресурс Достаём connection из пула Обязательно закрыть connection иначе весь пулл вытечет

  10. Создание базы данных для авторизации createschemamydb; CREATETABLEmydb.users( id intNOTNULLAUTO_INCREMENT, login varchar(25)NOTNULLUNIQUE, passwordvarchar(25)notnull, PRIMARY KEY(id) ); INSERTINTO MYDB.USERS (id, LOGIN ,PASSWORD) VALUES(null,'user','pass'); INSERTINTO MYDB.USERS (id, LOGIN ,PASSWORD) VALUES(null,'user1','pass1'); INSERTINTO MYDB.USERS (id, LOGIN ,PASSWORD) VALUES(null,'user2','pass2'); select*frommydb.usersorder by login

  11. Java Authentication and Authorization Service(JAAS) • Единая система авторизации • Введена для отделения авторизации от исходного кода приложения

  12. Применение jaas <security-constraint> <web-resource-collection> <web-resource-name>App requires authentication</web-resource-name> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>tomcat</role-name> </auth-constraint> <user-data-constraint> <!-- transport-guarantee can be CONFIDENTIAL, INTEGRAL, or NONE --> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> </login-config>

  13. Добавление пользователей %CATALINA_HOME%\conf\tomcat-users.xml <rolerolename="tomcat"/> <userusername="tomcat"password="tomcat"roles="tomcat"/> <userusername=“user"password=“pass"roles="tomcat"/>

  14. Авторизация через web форму <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.html</form-login-page> <form-error-page>/error.html</form-error-page> </form-login-config> </login-config>

  15. Авторизация через БД • Соответствующим образом определить пул доступа к БД • Определить таблицы пользователей и ролей Login и Role сохраняются в сессию Data base Login page Authorization manager Application Error page

  16. Как всё устроено сейчас Все настройки по умолчанию написаны внутри %CATALINA_HOME%/conf/service.xml Настройки ресурса с паролями и ролями: Настройки аутидентификации: <Resourcename="UserDatabase” auth="Container« type="org.apache.catalina.UserDatabase" description="Userdatabasethatcanbeupdatedandsaved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory” pathname="conf/tomcat-users.xml"/> <RealmclassName="org.apache.catalina.realm.LockOutRealm"> <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm>

  17. Подмена ресурса и процесса аутидентификации • Все действия для конкретного приложения можнопроделать в Context.xml <Resource name="jdbc/H2db"auth="Container" type="javax.sql.DataSource" driverClassName="org.h2.Driver" url="jdbc:h2:file:/data/storage" username="sa" password="" maxActive="20"maxIdle="10"maxWait="-1" description="Datasource for store data" /> <RealmclassName="org.apache.catalina.realm.DataSourceRealm“ dataSourceName="jdbc/H2db“ • localDataSource="true" userTable="users“ userNameCol="user_name" userCredCol="user_pass“ userRoleTable="user_roles“ roleNameCol="role_name"/> http://mrhaki.blogspot.ru/2011/01/configure-jdbcrealm-in-tomcat-for.html

  18. Роль и пользователь • Это классы реализующие интерфейс java.security.Principal publicclassRolePrincipalimplementsPrincipal{ privateStringname; publicRolePrincipal(Stringname){ this.name=name; } publicvoidsetName(Stringname){ this.name=name; } @OverridepublicStringgetName(){ returnname; } } Можно аналогично реализовать класс для пользователя

  19. Модуль авторизации • Модуль должен реализовывать интерфейс javax.security.auth.spi.LoginModule • Для процесса авторизации интересны методы: • initialize – вызывается первым, здесь нужно сохранить ссылку на пустой объект авторизации • login – в этом методе производится проверка пароля и имени пользователя. Метод должен либо вернуть true (успешная авторизация), иначе выбросить исключение производное от javax.security.auth.login.LoginException • commit – этот метод вызывается, если login вернул true. Метод нужен для установление роли и имени пользователя в объект авторизации.

  20. Конфигурация jaas • Необходима указать новые классы ролей и пользователя в context.xml: • Имя (appName) должно совпадать с именем в конфигурациях jaas: • Для того чтобы Tomcat подхватил конфигурации нужно указать путь к файлу: <RealmclassName="org.apache.catalina.realm.JAASRealm“ appName="WebApplication2" userClassNames="edu.jaas.UserPrincipal" roleClassNames="edu.jaas.RolePrincipal"/> WebApplication2 { edu.jaas.MyLoginModulerequireddebug=true; }; JAVA_OPTS=$JAVA_OPTS "-Djava.security.auth.login.config==$CATALINA_BASE/conf/jaas.config"

  21. Модуль авторизации Фрагмент кода метода login,отвечающий за проверку пароля. if(this.name==null||this.name.equals(STRING_EMPTY)){ thrownewCredentialNotFoundException("User name is required"); } if(this.password==null||this.password.equals(STRING_EMPTY)){ thrownewCredentialNotFoundException("Password is required"); }try{ returncheckUser(name, password); }catch(NamingException|SQLException ex){ Logger.getLogger(MyLoginModule.class.getName()).log( Level.SEVERE, ex.getLocalizedMessage(), ex); thrownewLoginException(ex.getMessage()); } Можно проверять любым способом

  22. Завершение сеанса (logout) • Для завершения сеанса или для того чтобы зайти в приложение под другим пользователем достаточно сбросить сессиюrequest.getSession().invalidate(); • После этого произойдёт вызов метода LoginModulelogout и принципы удаляться из объекта авторизации

  23. Источники • www.w3schools.com/sqlANSI SQL • http://www.javacodegeeks.com/2013/02/jdbc-realm-and-form-based-authentication-with-glassfish-3-1-2-2-and-primefaces-3-4.html настройка jaasна авторизацию через БД • http://www.byteslounge.com/tutorials/jaas-authentication-in-tomcat-exampleпримеры jaasавторизации

More Related