javax.servlet.Filter
. doFilter()
введите входящий ServletRequest
to HttpServletRequest
. HttpServletRequest#getRequestURI()
, чтобы захватить путь. java.lang.String
, такие как substring()
, split()
, concat()
и т. д., чтобы извлечь часть интереса и составить новый путь. ServletRequest#getRequestDispatcher()
, а затем RequestDispatcher#forward()
, чтобы перенаправить запрос / ответ на новый URL-адрес (перенаправление на стороне сервера , не отражается в адресной строке браузера), или передайте входящий ServletResponse
в HttpServletResponse
, а затем HttpServletResponse#sendRedirect()
, чтобы перенаправить ответ к новому URL-адресу (переадресация на стороне клиента, отображаемая в адресной строке браузера). web.xml
на url-pattern
в /*
или /Check_License/*
, в зависимости от пути контекста, или если вы уже на Servlet 3.0, используйте вместо него @WebFilter
. Не забудьте добавить проверку кода, если для URL необходимо изменить , и если нет t , а затем просто вызовите FilterChain#doFilter()
, иначе он будет вызывать себя в бесконечном цикле.
В качестве альтернативы вы также можете просто использовать существующий сторонний API для выполнения вся работа для вас, такая как UrlRewriteFilter Tuckey , который можно настроить так же, как и с mod_rewrite
Apache.
Вы можете попробовать ниже реализацию, мы создаем 3 операции с помощью цикла for
from datetime import datetime
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
dag = DAG(
"hello_world_0",
description="Starting tutorial",
schedule_interval=None,
start_date=datetime(2019, 1, 1),
catchup=False
)
chain_operators = []
max_attempt = 3
for attempt in range(max_attempt):
data_pull = BashOperator(
task_id='attempt_{}'.format(attempt),
bash_command='echo "Hello World - {}!"'.format(attempt),
dag=dag
)
chain_operators.append(data_pull)
data_validation = BashOperator(task_id='data_validation', bash_command='echo "Data Validation!"', dag=dag)
chain_operators.append(data_validation)
# Add downstream
for i,val in enumerate(chain_operators[:-1]):
val.set_downstream(chain_operators[i+1])
Я изменил schedule_interval на None, потому что с '* * * * *'
задание будет запускаться непрерывно