Как поддерживать пользователя авторизированным в приложении?
Я хочу сделать мессенджер на JAVA(пока планирую как это должно работать). Появился вопрос как поддерживать пользователя авторизированным, то есть нужно ли вообще что то по типу cookie(Сервер будет построен на мултиплексировании) или просто сохранять в HashMap сокет с логином пользователя(Делал так при написании чата).
Эрнэст Фарукшин, если постоянно держать открытый сокет, то не нужно ничего туда-сюда гонять. Но если сокет сломается, то ключ в куке поможет восстановить авторизацию без аутентификации.
Эрнэст Фарукшин, с каждым запросом браузер и так отправляет куки! С каждым запросом авторизацию делать не нужно. Просто, если это не браузер, сохраняйте сессию и куки на клиенте. Если открыли долгоживущий сокет, то внутри авторизации не нужно.
Эрнэст Фарукшин, ну так авторизовался, открыл сокет, работаем. Сокет слетел - авторизовываемся заново.
Но если после авторизации передать какой нибудь ключ, то его можно прихранить на клиенте и восстановить сессию без авторизации по этому ключу. Но тогда сервер должен проверить этот ключ на валидность и время жизни, и продолжить сессию с новым сокетом. Это все спокойно делается через куки например., если сервер - http.
А я например, когда недавно писал приложение использовал возможности Spring Boot.
Spring Boot + Spring Security + JavaFX. За авторизацию и хранение данных о пользователе отвечает Spring...
Эрнэст Фарукшин, в результат напишете свой велосипед, который ни расширить ни поддержать в дальнейшем никто кроме вас не сможет. Не нравится спринг, возьмите другие библиотеки, благо их есть и много - apache shiro например.
Эрнэст Фарукшин, у меня за последний год ровно два таких проекта! Где для себя один написал подобие интерпретатора языка pascal, собственный xml-парсер и базу данных. А второй - сделал подобие spring и osgi.
А вот сейчас матом - все это говно попало в их проекты, которые они вели 3 и 2 года подряд. Как результат - полностью переписываем эти проекты, с нуля! Потому как ни один кусок этого говно-макаронного кода взять не получилось. Вот блин, ни один класс!
С первым проектом из 500 классов осталось 20 новых, интерпретатор заменили на groovy, стандартный парсер и встроенную базу, паскалевские скрипты полностью переписали (а это пол проекта).
Второй проект сейчас тоже в полной переработке. Меняем на нормальный DI и OSGI!
Не пишите свои велосипеды никогда!
Эрнэст Фарукшин, да, можно, и нужно. Но не делайте из этого проект, умоляю. Напишите отдельные компоненты, потестируйте, поэкспериментируйте, посмотрите, посмотрите похожие реализации.
Но вот что ошибочно - сразу писать то, что уже написано сотню раз! Вы ведь не изучили ни спринг, ни сокеты, ни сервлеты, ни основные библиотеки.
Да, вы напишете все, постепенно, самостоятельно. Причем, увы, знаний не получите!
Для того, чтобы изучить сокеты - GUI не нужен! Для изучения DI - не нужно знать рефлегсию, а для рефлексии не нужно писать свой DI. Это как с сортировкой - можно сделать и попробовать разные алгоритмы, чтобы понять, как они работают, но не нужно писать свой метод Collections.sort() со своими алгоритмами.
Можно написать свой парсер http, но не нужно в него загонять свои сокеты, и уж тем более делать на его основе свой сервер, тем более, если вы это делаете в первый раз!
Это все равно, что с нуля сделать автомобиль, все детали вытачивая на станке, от колес до цилиндров и тормозных дисков.
Эрнэст Фарукшин, я могу поехать в лес, нарубить бревен, сделать избушку. Но без знаний она у меня будет херовая, хотя жить мне в ней и придется. Я лучше посмотрю, как строятся избушки, что можно делать, а что нельзя. Для этого мне не нужно строить избу! Мне нужно учиться! Рубить срубы, конопатить, делать стропила, окна и двери, обмениваться опытом. Вот тогда я и себе избу соберу и другим помогу.
Научитесь делать сруб и захотите избу, возьмите готовые двери, окна и крышу.
Алексей Черемисин, Просто сейчас я делаю это для проекта в школу, а изучать Spring достаточно долго (ну вроде как я понимаю). И я не думаю что дальше этого проекта продолжу двигаться в данном направлении, думаю перейти на ML.
Эрнэст Фарукшин, если вашим проектом будет кто-то пользоваться, то похоже вы взяли неподъемную ношу для своего уровня. Если только вы - пишите как нравится.