Acho que foi uma decisão razoável do Struts não fazer autenticação. A infra do servlet container já dá algumas alternativas que funcionam (BASIC/FORM) e vc. pode tb. usar certificados de cliente. Ter isto de forma ortogonal ao framework é uma “coisa boa”, NMO.
Se vc. quer dizer com isto ir para a página que o cara queria (protegida) e foi interceptado pelo login, o form-base resolve.
Via security-constraint declarativa no web.xml. De novo, acho que foi uma decisão correta não reinventar a roda.
No nível de caso de uso, que em Struts costumam mapear diretamente em Actions e, por tabela, em URIs diferentes, uso security-constraints.
No nível de dados, acaba sendo um problema da camada de serviços, mas o tiles pode exibir condicionalmente blocos em função dos roles do usuário autenticado pela infra-estrutura.