Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / public static HttpSession session / 10 сообщений из 10, страница 1 из 1
05.08.2017, 16:06
    #39500656
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
public static HttpSession session
Здравствуйте всем!
собственно сабж, на сколько безопасна такое объявление?
...
Рейтинг: 0 / 0
06.08.2017, 04:38
    #39500871
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
public static HttpSession session
посоны, никаких проблем не будут если я такую переменную объявлю?
Код: java
1.
public static HttpSession session 
...
Рейтинг: 0 / 0
06.08.2017, 04:46
    #39500872
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
public static HttpSession session
Музаффар,

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

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

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

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

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

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

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

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

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

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

Музаффарпока другого пути не нашел...
если есть хорошие варианты то был бы благодарен!
Хороший вариант, это Spring MVC.
Но в качестве костыля можно взять ThreadLocal. Важно только удалять HttpSession оттуда в блоке finally, чтобы пользователи вдруг не начали сессии друг-друга видеть.
...
Рейтинг: 0 / 0
06.08.2017, 11:17
    #39500917
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
public static HttpSession session
Музаффармне нужно из класса получить сессию...
начни с того, где этот твой класс, и сколько времени живёт его экземпляр.
...
Рейтинг: 0 / 0
06.08.2017, 14:22
    #39500944
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
public static HttpSession session
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
Форумы / Java [игнор отключен] [закрыт для гостей] / public static HttpSession session / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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