2012-04-14 8 views
0

Использование безопасности, управляемой контейнером на Glassfish, как вы можете создавать отдельные страницы «профиля» и ограничивать, что только зарегистрированный пользователь способен ее изменить? Скажем, у вас есть пользователь «Джон» и «Аманда», и у них обоих есть роль «пользователь», как вы можете быть уверены, что только «Джон» может изменить страницу своего профиля, а не «Аманду»?Как вызвать методы после успешного входа пользователя в систему?

<form method="POST" action="j_security_check"> 
    <table> 
     <tr> 
      <td>User name:</td> 
      <td><input type="text" name="j_username" /></td> 
     </tr> 
     <tr> 
      <td>Password:</td> 
      <td><input type="password" name="j_password" /></td> 
     </tr> 
     <tr> 
      <td><input type="submit" value="Login" /></td> 
     </tr> 
    </table> 
</form> 
+0

Не знаю, почему вы выложили вход в JSP. Убедитесь, что идентификатор пользователя текущего пользователя совпадает с идентификатором пользователя изменяемого профиля. –

+0

Это не JSP, это JSF 2.0 -> XHTML. И где/как вы проверите это до того, как страница будет доступна? – LuckyLuke

+0

Страница профиля должна быть одинаковой для всех пользователей по смыслу композиции и доступности. Содержимое будет отличаться в зависимости от пользовательских данных, полученных от БД. «Джон» не может просто изменить профиль «Амандас», потому что в первую очередь они работают в разных сеансах, а во-вторых, вы храните данные на основе уникального идентификатора, поэтому, если «Джон» вносит какие-либо изменения в свой профиль, только его «строка», в БД будет обновляться. Ограничение доступа означает, что вы просто помещаете страницу своего профиля на ограниченные страницы, доступные только для зарегистрированных пользователей с ролью «пользователь». Проверьте, например. [безопасность в отношении стеклянной рыбы] (http://tinyurl.com/c4pmfcx) – Fallup

ответ

1

Не можете проверить, зарегистрирован ли пользователь во время сеанса и профиль, который вы запрашиваете для извлечения из базы данных? Если они не совпадают, пользователь не может редактировать эту страницу. В идеале я бы включил такую ​​логику пользовательского сеанса в фильтр сервера, чтобы он мог работать на всех запросах.

1

Это можно легко сделать с помощью SEAM Framework. Вы просто создаете защищенный интерфейс @Admin, затем создаете метод проверки public @Secure @Admin checkAdmin (Identity identity) {}

После этого вы можете просто добавить @Admin к своим методам.

другой вещь, которую вы можете сделать, что проще:. просто использовать атрибут «вынесенный» и проверьте, какой пользователь вошел в