【发布时间】:2019-02-06 10:38:00
【问题描述】:
在 Spring Security 中是否有可能(它是 Java,当然可能,所以问题是 - 是否有可能以某种相对轻松的方式)自动授权来自本地主机的所有请求(好的,一些给定的 IP)作为属于给定测试用户的请求。
例如在某些过滤器中 - 接受所有请求,检查 IP,如果它来自本地主机,请说类似 spring.authorizeAs("user")
【问题讨论】:
标签: java web spring-security
在 Spring Security 中是否有可能(它是 Java,当然可能,所以问题是 - 是否有可能以某种相对轻松的方式)自动授权来自本地主机的所有请求(好的,一些给定的 IP)作为属于给定测试用户的请求。
例如在某些过滤器中 - 接受所有请求,检查 IP,如果它来自本地主机,请说类似 spring.authorizeAs("user")
【问题讨论】:
标签: java web spring-security
This answer 对于类似的问题可能会对您有所帮助。根据您的要求,您构建主体并将其手动设置为Security Context。
【讨论】:
在我的情况下,答案如下
@Component
public class LocalAuthFilter implements Filter {
@Autowired
private UserDetailsService mng;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
if (("127.0.0.1".equals(req.getRemoteAddr())) &&
("anonymousUser".equals(SecurityContextHolder.getContext().getAuthentication().getPrincipal()))) {
UserDetails userDetails = mng.loadUserByUsername("user"); //my test user
Authentication auth = new UsernamePasswordAuthenticationToken(
userDetails.getUsername(),
userDetails.getPassword(),
userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(auth);
}
filterChain.doFilter(req, resp);
}
@Override
public void destroy() {
}
}
【讨论】: