Spring Security - 需要添加自定义cookies
Posted
技术标签:
【中文标题】Spring Security - 需要添加自定义cookies【英文标题】:Spring Security - Need to add custom cookies 【发布时间】:2018-10-28 19:28:38 【问题描述】:我是 Servlet 的新手。我需要生成自定义值 cookie。在下面提到的代码中,会生成会话 cookie,但我还需要一个自定义值。
public ServletContextInitializer servletContextInitializer()
servletContext -> servletContext.getSessionCookieConfig().setName("sessiondemo");
我的 Servlet 代码如下。在注释行中,我需要添加 cookie。基本上,我将重定向到这里的请求来初始化 servlet 会话,同时我还需要在 servletcontext 中生成一个名为 hello 和 value world 的 cookie。
public class WebSecurityConfigurer extends WebMvcConfigurerAdapter
@Autowired
private Environment environment;
UserDetails user;
@Override
public void addViewControllers(ViewControllerRegistry registry)
registry.addViewController("/login").setViewName("login");
@Bean
public ServletContextInitializer servletContextInitializer()
/* This code doesn't work here. I need to use here to set up the cookie
Cookie cookie = new Cookie("YourCookieName", "CookieStringValue");
cookie.setMaxAge(10 * 365 * 24 * 60 * 60); // set cookie for 10 years
response.addCookie(cookie); */
return servletContext -> servletContext.getSessionCookieConfig()
.setName("oneKosmosIdpSessionId");
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter
@Autowired
private IdpConfiguration idpConfiguration;
@Override
protected void configure(HttpSecurity http) throws Exception
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/", "/metadata", "/favicon.ico", "/api/**", "/*.css",
"/css/**", "/js/**", "/img/**", "/fonts/**").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().hasRole("USER")
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.defaultSuccessUrl("/user.html", true)
.failureUrl("/login?error=true")
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/");
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception
auth.authenticationProvider(new AuthenticationProvider(idpConfiguration));
【问题讨论】:
您已将会话跟踪 cookie(通常为JSESSIONID
)重命名为 sessiondemo
。自定义值对您来说是什么意思?
意味着我必须再创建一个 cookie,比如 flag="true"。我不想删除这个 sessiondemo cookie 需要再添加一个。
【参考方案1】:
sessionCookieConfig 类用于更改 Servlet 引擎的常规 cookie 设置。
由于您使用的是 Spring Security,因此会话管理由 Spring 处理。所以,你真的不需要cookies。如果您需要存储任何用户级别的参数,请将其存储在您自己的 Spring 的 UserDetails
对象实现中并在视图中检索它。
此标签允许访问存储在 安全上下文。它直接在 JSP。因此,例如,如果 Authentication 是 Spring Security 的 UserDetails 对象的一个实例, 然后使用 will 呈现当前用户的名字。
当然,这种事情不需要使用JSP标签 有些人喜欢在 看法。您可以在 MVC 控制器中访问 Authentication 对象 (通过调用 SecurityContextHolder.getContext().getAuthentication()) 并将数据直接添加到模型中以供视图渲染。
来源:https://docs.spring.io/spring-security/site/docs/3.0.x/reference/taglibs.html
【讨论】:
@Priyanka Kanse 你检查了authentication
标签吗?【参考方案2】:
我需要生成自定义值 cookie。
您可以通过将此代码添加到您的 servlet 来创建具有自定义值的 cookie,如下所示:
Cookie cookie = new Cookie("YourCookieName","CookieStringValue");
cookie.setMaxAge(10 * 365 * 24 * 60 * 60); //set cookie for 10 years
response.addCookie(cookie); //add cookie to response
【讨论】:
你在哪里试过的?它怎么不工作?您是否检查过您的浏览器 cookie 是否存在? 我已经发布了代码请查看@Jonathan 是的,我明白为什么它在那里不起作用@PriyankaKanse。您不在 servlet 中,因此没有响应。您需要在 servlet(类扩展 HttpServlet)中使用该代码,并且您有 doPost/doGet 方法。 如何根据需要在这里使用它。我正在使用 springbok 和 theamleaf。 这个类是怎么调用的?从哪里来?以上是关于Spring Security - 需要添加自定义cookies的主要内容,如果未能解决你的问题,请参考以下文章
JSF / Spring Security - 添加其他登录字段不会调用自定义过滤器
Spring Security 自定义 AuthenticationException 消息