При входе в мое веб-приложение на Java меня перенаправляют на CSS, используемый в форме входа, как это исправить?

У меня есть веб-приложение на Java, которое состоит из множества сервлетов и JSP - примеры: сервлет контроллера /controller?abc=123&xyz=567некоторые другие сервлеты /showDocument?docid=55и некоторый прямой доступ к JSP, /userDetails.jsp,

Я включил веб-безопасность, чтобы предотвратить доступ ко всем (показано ниже), и у меня есть login.jsp страница, которая ссылается на файл CSS /styles.css,

Когда я получаю доступ к любому URL, я перенаправляюсь на страницу login.jsp.

Проблемы:

(1) CSS-стили не используются на странице входа в систему, вероятно потому, что styles.css считается защищенным ресурсом, и я еще не вошел в систему.

(2) После успешного входа в систему с именем пользователя и паролем меня перенаправляют в файл style.css (который отображается в браузере в виде обычного текста). Я предполагаю, что это потому, что ССЫЛКА на файл css считается самым последним запрошенным защищенным ресурсом, поэтому предполагается, что именно туда я и хочу перейти.

Если я скопирую и вставлю содержимое CSS в свой JSP, обе проблемы исчезнут, но тогда у меня будет CSS в двух местах: style.css и также в login.jsp.

Как это исправить? Есть ли способ для меня "белый список" *.css файлов, чтобы они не были защищены. Нужно ли определять другое ограничение безопасности для конкретных типов, которые я хочу защитить?

Вот мои текущие ограничения безопасности из моего web.xml:

<security-constraint>
  <display-name>name</display-name>
  <web-resource-collection>  
    <web-resource-name>Restricted</web-resource-name>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>APP_USER</role-name>
  </auth-constraint>
  <user-data-constraint>
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
</security-constraint>

Вот как я ссылаюсь на CSS в моих JSP:

<head>
  <LINK REL=StyleSheet HREF="styles.css" TYPE="text/css" MEDIA="screen" />
</head>

Любая помощь очень ценится!

обкрадывать

1 ответ

Решение

Вы можете отключить безопасность для CSS и изображений после того, как вы все защитили

<security-constraint>
  <display-name>name</display-name>
  <web-resource-collection>  
    <web-resource-name>Restricted</web-resource-name>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>APP_USER</role-name>
  </auth-constraint>
  <user-data-constraint>
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
</security-constraint>
<security-constraint><!--Exclude css and images here -->
   <web-resource-collection>
      <web-resource-name>Exclude from Security</web-resource-name>
      <url-pattern>/images/*</url-pattern><!-- No security for images -->
      <url-pattern>/css/*</url-pattern><!-- No security for css -->
   </web-resource-collection>
</security-constraint>
Другие вопросы по тегам