Alice: 嗨,Bob,我最近在研究如何构建一个统一的身份认证系统,你有什么建议吗?
Bob: 当然,Alice。我们可以使用Spring Security框架来简化这个过程。首先,我们需要定义一些基本的配置类。
Alice: 明白了。那我们先来看看配置类的代码吧。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login", "/register").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
]]>
Bob: 这段代码定义了安全配置,允许未认证用户访问登录和注册页面,其余所有请求都需要认证。
Alice: 非常好,接下来我们看看如何处理用户认证的具体逻辑。
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found");
}
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>());
}
}
]]>
Bob: 这个服务类实现了UserDetailsService接口,它会根据用户名查找用户并返回UserDetails对象。
Alice: 太棒了!这将帮助我们确保只有有效的用户才能访问系统。