正如标题所说,我正在开发一个从外部应用程序接收用户身份验证信息的Web应用程序.我的应用程序的弹簧控制器获取用户信息并将其存储在会话中.我想在Spring Security中验证此用户,然后使用他的角色授予/拒绝访问URL等URL
<intercept-url pattern="/myprotectedpage*" access="hasRole('rightrole')" />
我阅读了一些关于PRE_AUTH_FILTER和UserDetailsService的教程,但我无法理解. Spring Security的应用程序生命周期是什么?涉及哪些课程?
我需要一些完整的工作样本.
解决方法:
实现保存用户信息的服务.
@Service
public class UserAuthenticationInfoService {
private final Map<String, UserInfo> infos = new HashMap<String, UserInfo>();
public void addUserInfo(UserInfo userInfo){
infos.put(userInfo.getUsername(), userInfo);
}
public UserInfo getUserInfo(String username) {
return infos.get(username);
}
}
您的控制器使用您从外部应用程序收到的用户信息填充UserAuthenticationInfoService服务.
然后实现自定义UserDetailsService来访问这些信息.
public class CustomerUserDetailsService implements UserDetailsService {
@Autowired
private UserAuthenticationInfoService service;
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException {
UserInfo info = service.getUserInfo(userName);
return new User(info.getUsername(), info.getPassword(), info.getAuthorities());
}
}
并设置spring security context以使用此UserDetailsService(您可以在spring安全文档中找到它)