我不需要在这里担任角色,而且我不需要任何数据库。这份文件对我的要求太多了。我只想通过登录页面对用户进行身份验证。用户成功通过身份验证后,我将创建一个cookie。将检查所有即将到来的请求是否具有有效的cookie。
我的想法:如果Cookie过期,将会有一个过滤器检查每个即将发出的请求,并且一个入口点会将用户重定向到登录页面。
但我不知道将这些简单的要求与弹簧安全性相结合......还是应该使用别的东西?
答案 0 :(得分:1)
如果您使用的是Java Config,那么Spring Security Configuration将如下所示:
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private YourSpecificProvider provider; //simply wraps your API calls
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/css/**", "/js/**", "/fonts/**", "/images/**").permitAll() //add whatever else needs to be served without authentication
.anyRequest().authenticated();
http
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login");
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(provider);
}
}
通过该设置,Spring Security将自动处理添加cookie /检查cookie /重定向/等所需的所有步骤。
您当然必须在/login
根据您使用Spring的方式,您需要将Spring Security添加到Servlet过滤器链
答案 1 :(得分:0)
使用最小配置的Spring Security可以实现您想要的功能。 由于您不希望将用户凭据存储在数据库中,因此您可以将其以编码格式存储在配置中(但是 这是因为安全原因没有人建议你的事情 - 但那是另一个话题) 你想通过cookie做的事情类似于Spring提供的“记住我”功能。 要做到这一切,您通常需要放置过滤器声明/映射和最小配置文件以及登录/注销页面,您就完成了。 您可以查看简单示例here。 如果以后你需要更多(你永远不会知道:-))你已经拥有坚如磐石的产品。
答案 2 :(得分:0)
Spring验证用户在会话(cookie)上创建添加到SecurityContextHolder中的Authentication对象后的安全性。
首先,您需要创建身份验证管理器
public class RestAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
RestToken restToken = (RestToken) authentication;
String key = restToken.getKey();
String credentials = restToken.getCredentials();
User user = //Here create the implementation of how to validate the user
if(user == null){
throw new BadCredentialsException("User does not exist");
}
authentication = getAuthenticatedUser(user);
((RestToken) authentication).setDetails(user);
return authentication;
}
private Authentication getAuthenticatedUser(User user) {
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority(user.getRole()));
return new RestToken(user.getId(), user.getPassword(), authorities);
}
@Override
/*
Determines if this class can support the token provided by the filter.
*/
public boolean supports(Class<?> authentication) {
return RestToken.class.equals(authentication);
}
}
然后当您从页面收到登录时,调用该身份验证管理器并保存创建的身份验证对象。
Authentication successfulAuthentication = authenticationManager.authenticate(authentication);
SecurityContextHolder.getContext().setAuthentication(successfulAuthentication);