У меня есть HandlerInteceptor:
public class RequestInterceptor implements HandlerInterceptor {
@Autowired
private AddressService addressservice
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String ip_address = request.getRemoteAddr();
addressservice.storeIp_address(ip_address);
return true;
}
}
Объект:
public class IpAddress {
private String ip_address;
public String getIp_address() {
return ip_address;
}
public IpAddress setIp_address(String ip_address) {
this.ip_address = ip_address;
return this;
}
}
Сервис:
@Service
public class AddressService {
private IpAddress ipAddress;
public void storeIpAddress(String ip_address){
ipAddress.setIp_address(ip_address);
}
public void getIpAddress(){
ipAddress.getIp_address();
}}
Теперь, как можно сохранить IP-адрес вдругой объект, чтобы я мог получить к нему доступ при следующем перехвате запроса?Я пытался использовать @Service и т. Д., Но я всегда получаю исключения nullpointer.Я не могу понять, как работает Spring-Boot.Для меня это похоже на ракетостроение.
ОБНОВЛЕНИЕ:
@Service
public class AccessService {
private Map<String, LocalDateTime> access = new HashMap<>();
public Map getAccess() {
return access;
}
public void addAccess(String ip_address, LocalDateTime date) {
access.put(ip_address, date);
}
}
Перехватчик:
public class RequestInterceptor implements HandlerInterceptor {
@Autowired
private AccessService accessService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(accessService.getAccess().values());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
LocalDateTime datetime = LocalDateTime.now();
accessService.addAccess(request.getRemoteAddr(), datetime);
System.out.println(accessService.getAccess());
}
}
Я все еще получаю исключения Nullpointer ..
ОБНОВЛЕНИЕ2 Я наконец заставил это работать:
public class RequestInterceptor implements HandlerInterceptor {
private Map<String, LocalDateTime> access = new HashMap<>();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String ip_address = request.getRemoteAddr();
for (String key : access.keySet()){
if (access.get(key).plusSeconds(5).isBefore(LocalDateTime.now())){
access.remove(key);
}
}
if (access.containsKey(ip_address) == true){
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
access.put(request.getRemoteAddr(), LocalDateTime.now());
}
}