Вы также можете распространять свою статическую боль с помощью lambdas, поэтому все это выглядит читаемым:
s.filter(a -> propagate(a::isActive))
propagate
здесь принимает java.util.concurrent.Callable
в качестве параметра и преобразует любое исключение, пойманное во время вызова в RuntimeException
. Существует аналогичный метод преобразования Throwables # распространять (Throwable) в Guava.
Этот метод кажется необходимым для цепной связи лямбда, поэтому я надеюсь, что однажды он будет добавлен к одному из популярных libs или это распространяющееся поведение будет по умолчанию.
public class PropagateExceptionsSample {
// a simplified version of Throwables#propagate
public static RuntimeException runtime(Throwable e) {
if (e instanceof RuntimeException) {
return (RuntimeException)e;
}
return new RuntimeException(e);
}
// this is a new one, n/a in public libs
// Callable just suits as a functional interface in JDK throwing Exception
public static V propagate(Callable callable){
try {
return callable.call();
} catch (Exception e) {
throw runtime(e);
}
}
public static void main(String[] args) {
class Account{
String name;
Account(String name) { this.name = name;}
public boolean isActive() throws IOException {
return name.startsWith("a");
}
}
List accounts = new ArrayList<>(Arrays.asList(new Account("andrey"), new Account("angela"), new Account("pamela")));
Stream s = accounts.stream();
s
.filter(a -> propagate(a::isActive))
.map(a -> a.name)
.forEach(System.out::println);
}
}
Он будет / может быть пустым, когда enduser
Он также будет пуст, если новый стандартный проект Referrer Policy используется, чтобы предотвратить отправку заголовка референта в начало запроса. Пример:
<meta name="referrer" content="none">
Хотя Chrome и Firefox уже внедрили черновик версии политики реферера, вы должны быть осторожны с ним, потому что, например, Chrome ожидает no-referrer
вместо none
(и у меня есть также видел never
).
Список BalusC прочен. Еще один способ, которым это поле часто выглядит пустым, - это когда пользователь находится за прокси-сервером. Это похоже на то, что находится за брандмауэром, но немного отличается, поэтому я хотел упомянуть об этом ради полноты.
HTTP_REFERER - отправлено браузером, указав последнюю просматриваемую страницу браузером!
Если вы доверяете [HTTP_REFERER] по какой-либо важной причине, вы не должны этого делать, поскольку это может быть легко сфальсифицировано: / g21]
Попробуйте это расширение Firefox, вы сможете установить любые заголовки, которые вы хотите:
@ Мастер празднования:
Firefox:
расширения: refspoof , refontrol , изменить заголовки , no-referer
Полностью отключить: этот параметр доступен в about: config в разделе «network.http.sendRefererHeader», и вы хотите установить это 0, чтобы отключить передачу референта.
Google chrome / Chromium:
расширения: noref , spoofy , external noreferrer
Полностью отключить: Chnage ~ / .config / google-chrome / Default / Preferences или ~ / .config / chromium / Default / Preferences и установите это:
{
...
"enable_referrers": false,
...
}
Или просто добавьте --no-referrers в ярлык или в cli:
google-chrome --no-referrers
Opera:
Полностью отключить: Настройки> Настройки> Дополнительно> Сеть и снимите флажок «Отправить информацию о реферере»
Spoofin g веб-сервис:
Автономный прокси-сервер фильтрации (spoof any header):
Spoofing http_referer при использовании wget
'- referer = url'
Spoofing http_referer при использовании curl
-e, --referer
Spoofing http_referer wth telnet
telnet www.yoursite.com 80 (press return)
GET /index.html HTTP/1.0 (press return)
Referer: http://www.hah-hah.com (press return)
(press return again)
Some browsers limit access to not allow HTTP_REFERER to be passed
Не могли бы вы назвать пример такого браузера и / или расширения?
– Master of Celebration
15 May 2012 в 11:49