在Spring MVC / Security中设置和读取cookie

我是Spring新手,我需要在单击“登录”按钮时设置自定义cookie,然后该cookie将在webapp中变为红色。 这样做的最佳做法是什么? 此外,这带来了如何在webapp的每个页面上阅读它的问题?

我以为我可以用JavaScript设置cookie,稍后通过自定义filter读取它(它会从请求中读取cookie,将其设置为属性并将其发送给控制器。

这个想法是否正确? 或者我应该在其他地方设置cookie(如果是这样,为什么?)

更新1:

我想要实现的目标:我在登录页面上有下拉框(语言选择器),它有一些值(语言代码,例如“en”),所选值需要设置为cookie(例如“lang”)和对于i18n,“lang”cookie将在页面上显示为红色。 我已经让i18n工作了,但我需要阅读“lang”cookie来设置所选语言。

更新2:

我做了我想做的事,但它并不完全干净:

我通过Javascript或jQuery设置cookie,确切地说,当用户选择或更改的选择时,Javascript会将语言值注入cookie(例如en):

HTML:

  English  

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)); }); 

然后我创建了一个名为CookieFilter.java的Filer

 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 } } 

web.xml中添加了新filter

  CookieFilter  package.path.to.CookieFilter    CookieFilter /*  

为了完成所有事情,我从我的控制器中的CookieFilter获得了请求并且红色了我发送的属性:

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

现在我可以从model读取属性并将其设置在.JSP内部或者用它做我想做的一切。

这是我的解决方案,但必须有其他方式… 🙂

那么,是否需要使用cookie或者只是你正在采取的方法? 您可以使用Interceptor在Spring MVC中非常干净地处理i18n。 我在这里报道。 基本上你需要注册一个拦截器并确定你的浏览器请求。