Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Авторизация Java: Корпоративные приложения на Spring Boot

Перечисление возможных ролей

public enum UserRole {
    ADMIN,
    USER
}

Модель пользователя

public class User {

    private long id;

    private String username;

    private String email;

    private String password;

    // Поле, в котором будет находиться роль пользователя
    private UserRole role;

    // Геттеры и сеттеры
}

User Details Service

public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    // Репозиторий с пользователями
    private UserRepository repository;

    // Переопределяем метод loadUserByUsername()
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        // Получаем пользователя из репозитория
        User user = repository.findByUsername(email)
            .orElseThrow(() -> new UserNotFoundException("user not found"));

        // Получаем роль пользователя
        // String userRole = ...

        // Создаём список полномочий
        List<SimpleGrantedAuthority> authorities = List.of(
            new SimpleGrantedAuthority(userRole)
        );

        // Создаём новый объект org.springframework.security.core.userdetails.User
        // Передаём туда пароль,
        // имя пользователя (или те данные, которые используются вместо него, например почту или телефон),
        // и список полномочий, которым будет обладать пользователь
        return new org.springframework.security.core.userdetails.User(
            user.getEmail(), user.getPassword(), authorities
        );
    }
}

Настраиваем авторизацию

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    UserDetailsServiceImpl userDetailsService;

    // Переопределяем метод configure
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests().and().sessionManagement().disable();

        http
            .authorizeRequests()
                // Регистрация доступна всем пользователям
                .antMatchers(POST, "/users").permitAll()
                // Доступ к url /hello доступен аутентифицированным пользователям
                // с полномочиями "USER" или "ADMIN"
                .antMatchers("/hello").hasAnyAuthority(UserRole.USER.name(), UserRole.ADMIN.name())
                // Доступ к url /admin и всем вложенным url, например /admin/hello
                // разрешён только с полномочиями "ADMIN"
                .antMatchers("/admin/**").hasAuthority(UserRole.ADMIN.name())
                .and().httpBasic();
    }
}

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Java-разработчик
Профессия
с нуля
Разработка приложений на языке Java
1 декабря 10 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и соглашаетесь с «Условиями использования»

Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу