Тёмный

Java практика #2. Защита входа логином и паролем на EJB, CDI и WebFilter. 

BoostBrain
Подписаться 20 тыс.
Просмотров 9 тыс.
50% 1

Практикум Java. Делаем базу данных для входа по логину и паролю. Защищаем ресурсы от несанкционированного входа с помощью веб-фильтра(WebFilter).

Опубликовано:

 

23 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 40   
@asassinich
@asassinich 5 лет назад
Хочу выразить огромную благодарность автору за проделанную работу. Его уроки помогли мне заложить крепкий фундамент для дальнейшего изучения этого замечательного языка и связанных с ним технологий
@Дмитрийсекрет-н7о
Респект за хороший урок. Данный формат для нас учеников(мучеников) очень востребован. На основе таких уроков можно за бабахать какой нудь свой небольшой проект.
@kanatmg
@kanatmg 7 лет назад
Извините будут ли уроки по Spring boot'у?
@BoostBrainCourse
@BoostBrainCourse 7 лет назад
Честно говоря я не планировал и не знаю, есть ли спрос на эту тему. Но если коммент наберет некоторое количество лайков или кто то присоединится к пожеланию, то обязательно что то сделаем.
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Было бы неплохо рассказать про sprring но не сейчас, лучше все рассказать про java ee и часто используемые технологии jaxb jibx wsdl сервисы soap..
@ДмитрийРоманчук-ч4т
Спрос на Spring Boot огромен, Spring куда популярней и проще EE классического, буду рад урокам по Spring Boot, очень хорошо излагаете материал, а это редкость.
@ДмитрийРоманчук-ч4т
наоборот, Спринг куда важнее ЕЕ, потому что, Спринг полностью заменяет ЕЕ, у него постоянные обновления и доработки, на ЕЕ Оракл давно забили, выпуская раз на пару лет. Спринг в разы проще и удобней, нужно меньше писать, не нужен xml в 90% случаях, проще ориентироваться и не нужно блуждать в xml
@AndreyBaranov93
@AndreyBaranov93 7 лет назад
Spring это FrameWork, на который сейчас есть спрос, изучать его самостоятельно очень сложно, так как легко запутаться в его дебрях.....Я присоединяюсь к данному вопросу....
@pashapasha7659
@pashapasha7659 6 лет назад
Спасибо за Вашу работу. Отличный материал с превосходной подачей. Продолжайте :)
@vladimirpitchkurov4483
@vladimirpitchkurov4483 7 лет назад
спасибо за то, что делаете! очень полезно))
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Хороший урок, полезный, ждем еще видосов)
@Anton-Os
@Anton-Os 7 лет назад
Спасибо!
@ruslanpivovarov9960
@ruslanpivovarov9960 7 лет назад
Спасибо.
@ДанилДанилов-ц3е
Класс!!! Спасибо!!!
@ДжошКембл
@ДжошКембл 7 лет назад
Добрый день а по Spring будут уроки?
@АлександрТ-б3б
@АлександрТ-б3б 6 лет назад
Перед просмотром рекомендуется поставить скорость на 1.5 - 2 что бы не тратить свое время. Я смотрел на 2, хотя некоторым может быть не комфортно.
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Здравствуйте, такая ситуация: добавил в entity поле bollean и при создании ругается говорит синтаксическая ошибка. [2017-04-17 10:18:21,538] Artifact logic-1.0.0.jar: Error during artifact deployment. See server log for details. [2017-04-17 10:18:21,538] Artifact logic-1.0.0.jar: java.lang.Exception: {"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"logic-1.0.0.jar#postgresPU\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"logic-1.0.0.jar#postgresPU\": javax.persistence.PersistenceException: [PersistenceUnit: postgresPU] Unable to build Hibernate SessionFactory Caused by: javax.persistence.PersistenceException: [PersistenceUnit: postgresPU] Unable to build Hibernate SessionFactory Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [create table Insurance (id int8 not null, beginDate timestamp, check boolean, endDate timestamp, getPerson1Prava varchar(255), getPerson2Prava varchar(255), getPerson3Prava varchar(255), person1Name varchar(255), person2Name varchar(255), person3Name varchar(255), auto_id int8, client_id int8, insurer_id int8, price_id int8, type_id int4, primary key (id))] Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near \"boolean\" Позиция: 70"},"WFLYCTL0412: Required services that are not installed:" => ["jboss.persistenceunit.\"logic-1.0.0.jar#postgresPU\""],"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined} Что делать в этом случае?
@BoostBrainCourse
@BoostBrainCourse 7 лет назад
Думаю дело в наименовании переменной. CHECK - ключевое слово PostgreSQL. Надо выбрать другое имя.
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Хорошо,спасибо)
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
CDI bean указан как @SessionScoped Аналогично есть поля логина и пароля. когда делаю action на баттоне то поля не заполняются, они пустые почему? Когда ставишь брейкпоинты на гетеры и сетеры пароля и логина, то они заполняют поля все нормально. Но бины всегда разные, почему так? тоесть на одина бин пароль устанавливает, а на другой логин, а когда заходишь на экшен авторизации то там другой бин и там уже все поля соответственно пустые. Вроде все аналогично отличия минимальны. В чем проблема? если дело в то это я проставил
@BoostBrainCourse
@BoostBrainCourse 7 лет назад
У меня такая фигня бывала, когда я делал импорт SessionScoped из пакета javax.faces.bean, то есть import javax.faces.bean.SessionScoped; Для CDI нужно делать import javax.enterprise.context.SessionScoped; Если дело не в этом - пиши снова.
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
О точно, дело 100% в этом. Как я сам не догадался. Такая мелочь..
@BoostBrainCourse
@BoostBrainCourse 7 лет назад
С опытом придет)
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
BoostBrain помогите пожалуйста со вторым вопрос,очень нужно) как прасильно делать селекты с условием.. прям очень нужно сделать это в скором времени
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Здравствуйте! Такой вопрос: как правильно инжектить cdi beanы друг в друга(для того чтобы получить данные из них). У меня есть: @Named @SessionScoped public class UserDataBean implements Serializable{ private UserData userData; @EJB private InsurerDataManager dataManager; @Inject private AuthorizeBean authorizeBean; .... } AuthorizeBean содержит ссылку на пользователя который сделал вход. Мне в бине UserDataBean нужно получить из бина AuthorizeBean ссылку на пользователя. Как это сделать? Вот этот inject не работает. Точнее он инжектирует другой бин который является абсолютно пустым. Скорее я не правильно делаю что то.
@BoostBrainCourse
@BoostBrainCourse 7 лет назад
Циклическая зависимость, то есть ссылки друг на друга - вообще не очень хорошая идея. Лучше вынести такую логику в третий бин, внутрь которого можно инжектить первые два.
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Почему же ссылки друг на друга? у меня тольо UserDataBean ссылается на AuthorizeBean. тогда нужно сделать class AllBeans{ @Inject private AuthorizeBean authorizeBean; @Inject private UserDataBean userdata; //гетеры и сетеры } так что ли?
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Все равно не понимаю как получить в UserDataBean бин AuthorizeBean. Даже если сделаю такоой бин в котором будут все остальные бины AllBeans, то это не даст мне получить доступ из UserDataBean в другие бины. Получается надо в UserDataBean инжектить AllBeans. Это опять циклическая зависимость.. @Named @SessionScoped public class UserDataBean implements Serializable{ private UserData userData; @EJB private InsurerDataManager dataManager; @Inject private AuthorizeBean authorizeBean; public UserData getUserData() { return userData; } public void setUserData(UserData userData) { this.userData = userData; } public void updateData(){ dataManager.getInsurerData(authorizeBean.getInsurer()); } } @Named @SessionScoped public class AllBeans implements Serializable{ @Inject private UserDataBean dataBean; @Inject private AuthorizeBean authorizeBean; } @Named @SessionScoped public class AuthorizeBean implements Serializable{ private String login; private String password; private boolean auth; private Insurer insurer; private Admin admin; @EJB private AuthorizeManager authorizeManager; ...... } Это не решает проблему...
@BoostBrainCourse
@BoostBrainCourse 7 лет назад
Я, видимо, не так понял. Понял, что "друг в друга" как зависимость друг от друга. Если нет циклических зависимостей, то написано все правильно - достаточно аннотации @Inject. Если бин каждый раз новый и пустой, то скорее всего у него неправильный Scope. Надо проследить, чтоб был обязательно SessionScope.
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Я вам выше написал сами классы. Везде SessionScope и они импортируются от import javax.enterprise.context.SessionScoped; Я тоже не понимаю в чем проблема?
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Кароче теперь такая ошибка: В базе есть страховщик(@OneToMany на страховку). у него есть сущности логин пароль имя и фамилия. Также есть есть сущность страховка(@ManyToOne). Есть страховщик: ви,123,вася, иванов. и аа,1234,антон,андреев. На васю ссылается таблиблица страховка по id. На антона не ссылается. Теперь когда я с базы делаю селект на антона то он его мне возвращает. а на васю выкидывает exception. Почему так? запрос выглядит так: Query query = entityManager.createQuery("select a from Insurer a where a.login = :log and a.password = :pas"); query.setParameter("log", StringUtils.lowerCase(login)); query.setParameter("pas", StringUtils.lowerCase(password)); Insurer insurer; try { insurer = (Insurer) query.getSingleResult(); } catch (Exception e){ e.printStackTrace(); return null; } return insurer;
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
Возможно потому что у меня: public class Insurer { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String fName; private String sName; private String mName; private String login; private String password; @OneToMany(mappedBy = "insurer") private List insuranceList; ... } имеет лист Страховок? А вы бы не могли мне скинуть почту например, чтобы я мог вам более нагладно задавать вопросы,отправлять фотографии и код? Могу еще на bitbucket залить проект
@eldar_ziyatdinov
@eldar_ziyatdinov 7 лет назад
bitbucket.org/dreamteamssau/insuranceservice вот битабкет тут основные классы: view/../auth/.. logic/../auth/.. logic/../domain/... view/.../web-app/index.xhtml
@BoostBrainCourse
@BoostBrainCourse 7 лет назад
Если исключение NoResultException, то надо перепроверять сами данные, а запрос выглядит верно. Скорее всего не совпадают логин или пароль. Бывает так, что где то закрался пробел, например или перевод строки. Кстати toLowerCase для пароля не очень удачное решение - ведь там зачастую важен регистр букв.
@Mikhail_Ivanovich
@Mikhail_Ivanovich 5 лет назад
На дублировали одно и тоже, где упрощение, и в итоге потерял нить повествования.
@kanatmg
@kanatmg 7 лет назад
Спасибо!!!
@BoostBrainCourse
@BoostBrainCourse 7 лет назад
Ю а вэлкам, как говорят товарищи англосаксы)
Далее
НОВЫЙ РОЛИК УЖЕ НА КАНАЛЕ!
00:14
Просмотров 541 тыс.
Spring JDBC vs Hibernate. Вебинар #9
1:13:21
Просмотров 3,6 тыс.