• Как разграничить функционал страницы сайта в зависимости от роли пользователя?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Вы можете ограничить функционал на разных уровнях.
    Например, можно ограничить функционал на уровне шаблона. Если вы используете шаблонизатор thymeleaf, то скорее вам понадобится добавить в Gradle || Maven -
    implementation group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity5', version: '3.0.4.RELEASE'

    А дальше уже в шаблон вставить - sec:authorize="hasAuthority('ADMIN')"
    Например,
    <div class="dashboard_rules" sec:authorize="hasAuthority('ADMIN')">
    <!-- Увидит только админ-->
    </div>


    Также можно на уровне контроллера ограничить доступ:
    @PreAuthorize("hasAuthority('ADMIN')")

    Как в зависимости от роли пользователя, после удачного входа подгружать index.html с разным наполнением?

    Я обычно, делаю следующим образом:
    После авторизации получаю текущего авторизованного юзера
    @AuthenticationPrincipal UserDetails currentUser
    Нахожу юзера и проверяю его права:
    User user = (User) userService.findUserByEmail(currentUser.getUsername());

    Через if() {} else {} отдаю тот или иной контент.
    Например,
    @GetMapping("/dashboard")
    public String dashboard(
            @AuthenticationPrincipal UserDetails currentUser,
            Model model
    ) {
        model.addAttribute("pageTitle","Панель управления");
        User user = (User) userService.findUserByEmail(currentUser.getUsername());
        if(user.isAdmin()) {
            model.addAttribute("posts", posts.getAdminPosts());
        }  else {
            model.addAttribute("posts", posts.getUserPosts());
        }
    
        return "backend/dashboard";
    }
    Ответ написан
    Комментировать
  • Spring. Как автоматически заполнить форму после заполнения одного из полей?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    У вас же форма будет на клиенте, а соответствено, java там не поможет. Вам нужно при помощи javascript (при потере фокуса поля) аяксом отправить запрос на сервер и если есть запись с нужным вам ID заполнять нужные поля при помощи JS. А данные для вставки будут в полученном ответе от сервера в JSON или XML Соответственно, это POST ajax запрос и скорее @RestController, который вернет ответ.
    Ответ написан
    Комментировать
  • Почему запрос не видит тела?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    По стандарту delete-запросы не могут иметь тела - RFC 7231.
    Ответ написан
    2 комментария
  • Что нужно знать для написания backend игрового сервера?

    Nipheris
    @Nipheris Куратор тега C#
    Александр Александров к сожалению, вынужден присоединиться к Сергей в том, что вы не знаете, что вам нужно от сервера.

    Понимаете, все эти архитектурные паттерны - "бэкенды" в web-понимании, REST-ы - это все хорошо и удобно, но стандартные подходы web - это не всегда про игры и риалтайм-приложения.

    Вы должны принять много различных решений, прежде чем браться что-то делать.

    > есть сервер, к которому обращается игровое приложение что бы записать или извлечь определенных данные игрока
    Вот в этих "определенных данных" и вся суть. Можно по-разному распределять логику между клиентом и сервером, но нередко, особенно в играх, где нужна устойчивость к мошенничеству, большая часть игровой логики находится на сервере. Это гораздо больше, чем "извлечь данные игрока". Если игровая логика находится на сервере, то тогда и требования к процессу обмена данными соответствующие - в REST особого смысла нет, т.к. все равно придется вводить понятие "сессии" или "соединения" с сервером, и хранить его состояние. И ваша основная задача будет не в легкой масштабируемости на заранее неизвестное число клиентов, а наоборот, в поддержании максимально комфортного игрового процесса для имеющихся игроков, а масштабирование будет на втором месте и будет достигаться немного иными архитектурными решениями.

    Многие крупные игровые проекты с большой долей логики на сервере используют свои протоколы обмена (как правило, бинарные) поверх обычного TCP-соединения. Многие применяют различные языки описания таких протоколов, чтобы было проще управлять разработкой, и вносить изменения в протокол (например, по таким описаниям можно автоматически генерировать часть серверного и клиентского кода). Например, Близзы, насколько мне известно, используют Protocol Buffers для Diablo 3.

    С другой стороны, если ваша игра - по сути однопользовательская (например, маджонг какой-нибудь), и вам нужно только сохранять статистику, без особых требований к доверию (т.е. только ради удобства игрока), то тогда простенький REST-сервис вам прекрасно подойдет.

    возможность сохранить процесс прохождения игры

    вам нужно решить, какой уровень доверия у этих данных. Это во многом и будет определять архитектуру. Если ваш проект соревновательного характера, и подмена данных о достижениях или подтасовка результатов отдельных игр или матчей может поставить крест на всем проекте, то тогда клиент не может быть доверенной стороной, и критичная логика должна быть на сервере.
    Ответ написан
    8 комментариев
  • Как решить вопрос с неудачным проектом freelancer.com?

    Zifix
    @Zifix
    Barbatum
    Работайте на UpWork, там все гораздо адекватнее, и деньги берут по факту.
    Ответ написан
    1 комментарий
  • Как работают потоки в Java?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    join() блокирует родительский поток до тех пор, пока не завершится поток для которого вызван join(). Собственно, именно потому, что после вызова join() родитель не идёт дальше, он и не завершится раньше.
    Для иллюстрации попробуйте в вашем Calculate вставить бесконечный цикл, а после thread.join(); - System. out.println("joined");

    На тему кода - всё ок, кроме того, что не учтён InterruptedException, который может выбросить join
    Ответ написан
    5 комментариев
  • Как запустить web проект (war file) из под консоли?

    EugeneP2
    @EugeneP2
    Java Dev
    Spring-Boot вам в помощь. На выходи получаете исполнимый jar файл, в котором будит уже встроенный tomcat/jetty. И все чудесно работать.

    Можно заюзать чисто jetty и запуск будит выглядеть как то так
    java -jar jetty-runner.jar my.war
    Ответ написан
    Комментировать
  • Где брать проверенные библиотеки для Java? Есть ли готовые решения для шифрования?

    TyLeRRR
    @TyLeRRR
    Student
    www.mkyong.com
    у этого штриха найдете много полезного, может и ответ на ваш вопрос
    Ответ написан
    Комментировать
  • Чего хочет hibernate?

    @Partizanin Автор вопроса
    Java Developer
    Все спасибо разобрался, проблема была в
    @SequenceGenerator(name = "sequence", sequenceName = "seq_operator_id", allocationSize = 1)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence")


    в каждой модели объектов!
    Раньше этот проект запускался вместе с базой Oracle а он поддерживает SequenceGenerator, а сейчас запустил с бзой MySql и возник конфликт!
    Ответ написан
    Комментировать
  • Как подключиться к серверу с клиента?

    Toisen
    @Toisen
    Backend Developer
    Нужен вшений ip для сервера. Тот, что Вы вводите - выдан вашему компьютеру роутером и "извне" его не видно.
    Ответ написан
    4 комментария
  • Как расширить класс java за счет java.io?

    Так, и сделать, как вы сами сказали - расширить.
    В данном случае "унаследовать":

    import java.io.BufferedReader;
    import java.io.Reader;
    
    public class GetSet extends BufferedReader {
        private int intVariable;
        private double doubleVariable;
        private String stringVariable;
    
        public GetSet(Reader in, int sz) {
            super(in, sz);
        }
    
        public GetSet(Reader in) {
            super(in);
        }
    
        public int getIntVariable() {
            return intVariable;
        }
    
        public void setIntVariable(int newIntVariable) {
            intVariable = newIntVariable;
        }
    
        public double getDoubleVariable() {
            return doubleVariable;
        }
    
        public void setDoubleVariable(double newDoubleVariable) {
            doubleVariable = newDoubleVariable;
        }
    
        public String getStringVariable() {
            return stringVariable;
        }
    
        public void setStringVariable(String newStringVariable) {
            stringVariable = newStringVariable;
        }
    
        public void message() {
    
            System.out.println("Int variable = " + intVariable +
                    "\nDouble variable = " + doubleVariable +
                    "\nString variable = " + "\"" + stringVariable + "\"");
    
        }
    }

    Единственное замечание,
    В Java такая запись некорректна:
    getset.setIntVariable = getset.readLine();
    Параметры функции задаются так:
    getset.setIntVariable(Integer.parseInt(getset.readLine()));

    Можно немного изменить функцию:
    public void setIntVariable(String s) {
            intVariable = Integer.parseInt(s);
        }
    Ответ написан
    5 комментариев
  • Узнать время в нужном мне часовом поясе?

    Используем класс SimpleDateFormat:
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    format.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date date = format.parse("2015-01-23T09:10:00");
    Ответ написан
    Комментировать
  • Как контролировать использование программы в windows?

    @abcyu
    Разработчик
    У многих браузеров именно специально для этих целей есть "kiosk mode"
    Для этих же целей есть и специальные браузеры, урожденные без контролов.
    Искать по фразе "browser kiosk mode"
    Node-WebKit, например, умеет.
    Умеют и классические браузеры, например, Chrome: www.kioware.com/resources.aspx?resID=41
    Ответ написан
    Комментировать
  • Tomcat это сервер, на котором деплоится сервер?

    @aol-nnov
    > Обычно, я сервер сайд своих апликух просто хощу у себя на ПК без всяких tomcato'в.
    особенно, если он у тебя на похапэ.

    Tomcat - контейнер сервлетов. Решительно хотя бы в вики загляни.
    Ответ написан
    2 комментария
  • Как создать объект зная имя его класса?

    @nirvimel
    Object object = Class.forName(className).getConstructor().newInstance();
    Ответ написан
    Комментировать
  • Почему не удается добавить объект в Map из его конструктора в Java?

    @Wol_fi
    php, js, mysql, highload
    Что я делаю не так?

    Объявили переменную, но не задали ей значение.
    Ответ написан
    Комментировать
  • Где тут ошибка?

    disc
    @disc
    веб-разработчик
    Local variables and parameters cannot have public or private modifier. You can only give final to them.

    Уберите public у метода
    Ответ написан
    Комментировать
  • Нужны ли кому то сайты написанные на Spring?

    zolt85
    @zolt85
    Программист
    Ну вот напишут Вам тут, что Вы херней маетесь, и что? Бросите? Думаю, что нет. Выводите на свет Ваш продукт, и уже на деле увидите, стоила ли игра свеч. Удачи Вам!
    Ответ написан
    Комментировать
  • Нужны ли кому то сайты написанные на Spring?

    DVamp1r3
    @DVamp1r3
    Java/PHP программист
    Обычно людей мало интересует что под капотом сайта, им дизайн подавай.
    Ответ написан
    Комментировать
  • Как объяснить термин "Паттерн головного мозга"?

    @pixik
    Это когда человек вместо простого очевидного решения применяет какой нибудь паттерн типа фабрики для вывода "Hello, world!", на всякий случай закладывая в своё решение гибкость. Такое говорят про человека, который закладывает гибкость и множество различных абстракций, наверняка не зная, нужны они там или нет. Этот человек обычно мыслит паттернами и его решения довольно сложны и не очевидны для чтения другими программистами. Обычно это применяют как диагноз=)
    Ответ написан
    2 комментария