У меня есть webapp, использующий Shiro для аутентификации. Соответствующими частями web.xml и shiro.ini являются:
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
и
[main]
authc.loginUrl = /authoring/login.html
authc.successUrl = /authoring
logout.redirectUrl = /authoring/login.html
[users]
foo = foo
[urls]
/authoring/logout = logout
/authoring/** = authc
Shiro корректно перехватывает все запросы от клиентов, не прошедших проверку подлинности, и перенаправляет на сконфигурированный loginUrl (а затем перенаправляет их на запрашиваемую страницу после успешной проверки подлинности). То, что я хотел бы иметь, заключается в том, что если аутентифицированный клиент делает явный запрос /authoring/login.html, перенаправляет это на /authoring. Это будет ТОЛЬКО, если клиент аутентифицирован.
Например, подумайте о том, как работает Gmail, пытаясь получить доступ к mail.google.com(или даже https://accounts.google.com/ServiceLogin), когда вы уже вошли в систему, перенаправляет вас в папку "Входящие". Возможно ли это с Сиро из коробки? Если нет, то какой правильный способ его реализовать?