powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / public static HttpSession session
10 сообщений из 10, страница 1 из 1
public static HttpSession session
    #39500656
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!
собственно сабж, на сколько безопасна такое объявление?
...
Рейтинг: 0 / 0
public static HttpSession session
    #39500871
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посоны, никаких проблем не будут если я такую переменную объявлю?
Код: java
1.
public static HttpSession session 
...
Рейтинг: 0 / 0
public static HttpSession session
    #39500872
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,

Да, куча потенциальных проблем. Начиная от глобальной переменной, заканчивая многопоточностью.
...
Рейтинг: 0 / 0
public static HttpSession session
    #39500894
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар, а чем обычная переменная не устраивает?
...
Рейтинг: 0 / 0
public static HttpSession session
    #39500897
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарна сколько безопасна такое объявление?
На сколько объявление само по себе может быть опасным?
...
Рейтинг: 0 / 0
public static HttpSession session
    #39500906
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМузаффар,

Да, куча потенциальных проблем. Начиная от глобальной переменной, заканчивая многопоточностью.

т.е. так объявить HttpSession не желательно?

maytonМузаффар, а чем обычная переменная не устраивает?
мне нужно из класса получить сессию...

пока другого пути не нашел...
если есть хорошие варианты то был бы благодарен!
...
Рейтинг: 0 / 0
public static HttpSession session
    #39500908
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарmaytonМузаффар, а чем обычная переменная не устраивает?
мне нужно из класса получить сессию...

пока другого пути не нашел...
если есть хорошие варианты то был бы благодарен!
Я не знаю что вызвало тревогу коллег. Но я предполагаю что наш мир устроен так
что обычное веб-приложение обслуживает много HttpSessions. А ты его объявил 1:1
с классом контейнером. Это странно. Вообще если ты пишешь ООП-код - то делай объекты POJO.
И как только возникнет задача построения какого-то шаблона (пул или синглтон)
то тогда стоит усложнять. А если ты со старта объявил статическую переменную
HttpSession то ... у любого делающего code-review возникает крик - "What's the fuck?"
и далее тебе придется объяснять - зачем ты это сделал и что имел в виду.

Кстати рекомендую тебе установить SonarQube и периодически сканировать свой
код на такие ситуации.
...
Рейтинг: 0 / 0
public static HttpSession session
    #39500910
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарт.е. так объявить HttpSession не желательно?

не желательно

Музаффармне нужно из класса получить сессию...

А класс её откуда получает? Почему нужно именно из класса, а не экземпляра. И почему мы до сих пор не используем Spring MVC?

Музаффарпока другого пути не нашел...
если есть хорошие варианты то был бы благодарен!
Хороший вариант, это Spring MVC.
Но в качестве костыля можно взять ThreadLocal. Важно только удалять HttpSession оттуда в блоке finally, чтобы пользователи вдруг не начали сессии друг-друга видеть.
...
Рейтинг: 0 / 0
public static HttpSession session
    #39500917
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффармне нужно из класса получить сессию...
начни с того, где этот твой класс, и сколько времени живёт его экземпляр.
...
Рейтинг: 0 / 0
public static HttpSession session
    #39500944
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, хорошо.

Blazkowicz, давайте спринг оставим на потом...

ну собственно вот код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
@ServerEndpoint(value = "/ws", configurator = WsServerConfigurator.class)
public class WS {

    public static final Set<Session> armUsers = Collections.synchronizedSet(new HashSet<Session>());
    public static final Map<Session, HttpSession> usersSession = new HashMap<>();

    @OnMessage
    public void onMessage(String message, Session userSession) {

        String[] str = message.split("");
        if (str[0].equals("getSt")) {
            FindSt find = new FindSt();
            try {
                find.getSt(userSession, message);
            } catch (SQLException ex) {
                Logger.getLogger(WS.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else if (str[0].equals("sessions")) {
            usersSession.put(userSession, hs);
        } else {
            Write w = new Write();
            w.getWrite(userSession, message);
        }

        prolongSess(userSession);
    }

    @OnOpen
    public void onOpen(EndpointConfig endpointConfig, Session userSession) {
        userSession.getUserProperties().put("usrname", endpointConfig.getUserProperties().get("usrname"));
        armUsers.add(userSession);
    }

    @OnError
    public void onError(Throwable t) {
    }

    @OnClose
    public void onClose(Session userSession) {
        armUsers.remove(userSession);
    }

    private void prolongSess(Session userSession) {
        if (usersSession.containsKey(userSession)) {
            usersSession.get(userSession).setMaxInactiveInterval(Integer.parseInt(sessionTimeoutFromWebXml.trim()) * 60);
        }
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class WsServerConfigurator extends ServerEndpointConfig.Configurator {

    public static HttpSession hs;

    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
        HttpSession session = (HttpSession) request.getHttpSession();
        Users u = (Users) session.getAttribute("usrname");
        hs = session;
        sec.getUserProperties().put("usrname", u);
    }
}

...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / public static HttpSession session
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]