Ответы пользователя по тегу Spring
  • Как быть с authorizeRequests после переноса с XML в Java Аннотации?

    В самом сообщении об ошибке есть рекомендация как это исправить:
    role should not start with 'ROLE_' since it is automatically inserted. Got 'ROLE_ADMIN'


    Если посмотреть исходники SpringSecurity там следующая картина:
    private static String hasAnyRole(String... authorities) {
            String anyAuthorities = StringUtils.arrayToDelimitedString(authorities, "','ROLE_");
            return "hasAnyRole('ROLE_" + anyAuthorities + "')";
        }
    
        private static String hasRole(String role) {
            Assert.notNull(role, "role cannot be null");
            if (role.startsWith("ROLE_")) {
                throw new IllegalArgumentException("role should not start with 'ROLE_' since it is automatically inserted. Got '" + role + "'");
            }
            return "hasRole('ROLE_" + role + "')";
        }


    Соотвествено надо переписать JavaConfig следующим образом

    http.
                    authorizeRequests()
                    .antMatchers("/", "/login").permitAll()
                    .antMatchers("welcome").hasAnyRole("USER", "ADMIN")
                    .antMatchers("/admin/**").hasRole("ADMIN")
                        .anyRequest().authenticated()   //TODO Розобраться что это-такое
                    .and()
                    .formLogin()
                    .loginPage("/login").failureUrl("/login?error")
                    .defaultSuccessUrl("/welcome")
                    .usernameParameter("username")
                    .passwordParameter("password")
                    .and().logout()
                    .logoutSuccessUrl("/login?logout");
    Ответ написан
    1 комментарий