Spring Security - нужно добавить пользовательские куки - PullRequest
0 голосов
/ 18 мая 2018

Я новичок в сервлетах.Мне нужно создать собственное значение cookie.В приведенном ниже коде сессионный cookie создается, но мне нужен еще один с пользовательским значением.

public ServletContextInitializer servletContextInitializer() {
    servletContext -> servletContext.getSessionCookieConfig().setName("sessiondemo");
}

Мой код сервлета такой, как показано ниже.В строке комментария мне нужно добавить куки.По сути, я перенаправляю запрос, который приходит сюда, чтобы начать сеанс сервлета. Мне также нужно сгенерировать cookie с именем hello и значением world в servletcontext.

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Класс sessionCookieConfig используется для изменения общих настроек cookie для Servlet Engine.

Поскольку вы используете Spring Security, Spring управляет сессией.Таким образом, вам не нужны файлы cookie.Если вам нужно сохранить какие-либо параметры уровня пользователя, сохраните их в собственной реализации UserDetails объекта Spring и получите его в представлении.

Этот тег позволяет получить доступ к текущему объекту аутентификации, хранящемуся вконтекст безопасности.Он отображает свойство объекта непосредственно в JSP.Так, например, если основным свойством Authentication является экземпляр объекта UserDetails в Spring Security, тогда при использовании будет отображаться имя текущего пользователя.

Конечно, нет необходимости использовать теги JSPдля такого рода вещей, и некоторые люди предпочитают держать как можно меньше логики во взгляде.Вы можете получить доступ к объекту аутентификации в контроллере MVC (вызвав SecurityContextHolder.getContext (). GetAuthentication ()) и добавить данные непосредственно в модель для рендеринга с помощью представления.

Источник: https://docs.spring.io/spring-security/site/docs/3.0.x/reference/taglibs.html

0 голосов
/ 18 мая 2018

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

Вы можете создать файл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...