Пример регистрации и авторизации в микросервисной архитектуре Java Spring
Задача заключается в реализации полноценного проекта в микросервисной архитектуре с авторизацией и регистрацией (Java, Spring, PostgreSQL)
Представим, к примеру, что это социальная сеть.
Пользователь должен иметь возможность проходить регистрацию и авторизацию в системе. У пользователя, соответственно, есть присущие ему объекты, поэтому API должен каким-то образом понимать, в контексте какого юзера возвращать данные.
Понятно, что некоторый авторизационный сервис должен генерировать JWT и возвращать в куки клиенту, чтобы с этим токеном он имел возможность ходить по ручкам.
Но сам функционал авторизации выглядит как шаблонная задача, которая не сильно различается в проектах и хотелось бы увидеть полноценный пример (код) такой реализации с взаимодействием с базой данных, вместо попыток изобретения велосипеда
Возможно я ошибаюсь и мне нужно совсем другое, так как практически нигде не вижу реализацию регистрации в Spring. Но для меня это странно. Как юзер сможет авторизоваться, если он не зарегистрирован?
Ответы (1 шт):
Если Вам нужен шаблонный код, то он может выглядеть следующим образом:
public interface UserService {
User register(User user);
String login(String username, String password);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public User register(User user) {
// Логика регистрации пользователя
}
@Override
public String login(String username, String password) {
// Логика аутентификации и генерации JWT
}
}
Контроллер:
@RestController
public class AuthController {
@Autowired
private UserService userService;
@PostMapping("/register")
public User register(@RequestBody User user) {
return userService.register(user);
}
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password) {
return userService.login(username, password);
}
}
Теперь нужно настроить Security и jwt-фильтр:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilterBefore(new JwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}
}
public class JwtTokenFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
// Логика проверки JWT и аутентификации
}
}
Остальное зависит от Вашей конкретной задачи.