Ustaw i przeczytaj pliki cookie w Spring MVC / Security

Jestem nowym użytkownikiem Springa i muszę kliknąć niestandardowy plik cookie po kliknięciu przycisku „Login”, a następnie plik cookie będzie czerwony wewnątrz aplikacji internetowej. Jaka jest najlepsza praktyka, aby to dokładnie zrobić? Co więcej, pojawia się pytanie, jak przeczytać to później na każdej stronie w aplikacji internetowej?

Pomyślałem, że mogę ustawić pliki cookie za pomocą JavaScript i odczytać je później za pomocą niestandardowego filtru (który odczytywałby plik cookie z żądania, ustawiał go na atrybut i wysyłał do kontrolera.

Czy ta myśl jest poprawna? Czy powinienem ustawić plik cookie w innym miejscu (jeśli tak, to gdzie i dlaczego?)

AKTUALIZACJA 1:

Co chcę osiągnąć: Mam listę rozwijaną (która jest selektorem języka) na stronie logowania, która ma pewne wartości (kod języka, np. „En”), a wybrana wartość musi być ustawiona jako cookie (np. „Lang”) i to Plik „lang” będzie czerwony na i18n później na stronach. Sprawiłem, że i18n zadziałał, ale muszę przeczytać plik cookie „lang”, aby ustawić wybrany język.

AKTUALIZACJA 2:

Zrobiłem to, co chciałem zrobić, ale to nie jest dokładnie czyste:

Ustawiam plik cookie za pomocą Javascript lub jQuery, aby być dokładnym, a kiedy użytkownik wybiera lub zmienia wybór w<select/> następnie Javascript wprowadza wartość językową jako cookie (np. en):

HTML:

<select name="language" id="selectLanguage" class="form-control">
   <option val="en">English</option>
</select>

JS:

var cookie = {

    set: function($this) {
        var now = new Date();
        var time = now.getTime();
        var expireTime = time + 1000*36000;
        now.setTime(expireTime);
        document.cookie = 'lang=' + $this.val() +';expires='+now.toGMTString()+';path=/';
    }

}

$('#selectLanguage').change(function(event) {
    cookie.set($(this));
});

Potem stworzyłem nowyFiler zadzwoniłemCookieFilter.java:

public class CookieFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;

        Cookie[] cookies = ((HttpServletRequest) req).getCookies();
        if (cookies != null) {
            for (Cookie ck : cookies) {
                if(ck.getName().toString().equals("lang")){
                    req.setAttribute("languageCookie", ck.getValue());
                } else {
                    req.setAttribute("languageCookie", "en");
                };
            }
            chain.doFilter(req, res);
        }
    }

    public void init(FilterConfig config) throws ServletException {
        // TODO Auto-generated method stub
    }
    public void destroy() {
        // TODO Auto-generated method stub
    }
}

Dodano nowefiltr wweb.xml:

<filter>
    <filter-name>CookieFilter</filter-name>
    <filter-class>
        package.path.to.CookieFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>CookieFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

I żeby wszystko skończyć, otrzymałem prośbęCookieFilter w moim kontrolerze i czerwonym atrybutem, który wysłałem:

String cookie = request.getAttribute("languageCookie").toString();
model.addAttribute("languageCookie",cookie);

Teraz mogę odczytać atrybut zmodel i ustaw go w .JSP lub zrób wszystko, co chcę.

To jest moje rozwiązanie, ale musi być inny sposób ... :)

questionAnswers(1)

yourAnswerToTheQuestion