Вы не можете получить объект Session с использованием SecurityContext. Интерфейс SecurityContext имеет дело только с безопасностью, тогда как HttpServletRequest предоставляет всю информацию о конкретном запросе http (s), включая безопасность.
Хотя вы можете использовать объект Session для реализации безопасности, таким образом вы не используете какой-либо контейнер сервлетов, встроенный в функции безопасности.
Оба SecurityContext и HttpServletRequest есть метод
boolean isUserInRole(String role)
, который может быть использован для получения роли вошедшего в систему пользователя и сделать соответствующие действия на сервере (например, вернуть другой ресурс, основанный на роли)
вы можете определить роли в web.xml (в случае, когда вы не используете SecurityContext)
<security-constraint>
<web-resource-collection>
<url-pattern>/rest/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<url-pattern>/rest/orders/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>customer</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>my-default-realm</realm-name>
</login-config>
Однако при использовании SECUR ityContext вы можете sublass ResourceConfig и использовать аннотации для добавления ролей пользователей (https://jersey.java.net/documentation/latest/security.html)
@Path("/")
@PermitAll
public class Resource {
@RolesAllowed("user")
@GET
public String get() { return "GET"; }
@RolesAllowed("admin")
@POST
public String post(String content) { return content; }
Теперь, даже если вы явно не называйте SecurityContext.isUserInRole (роль), Джерси будет делать эту проверку внутри. Один полный пример использования SecurityContext можно найти здесь https://simplapi.wordpress.com/2015/09/19/jersey-jax-rs-securitycontext-in-action/
Что касается того, когда использовать один над другим, используйте SecurityContext в Джерси (это проще и гибче, используя только аннотации).
Где находится файл web.xml? У меня его нет. Получил только pom.xml файла Maven, Hibernate или Config.yml of Jersey. –
Он должен быть в папке WEB-INF. Тем не менее, если вы используете SecurityContext, вам не нужно добавлять информацию, связанную с безопасностью, в ваш web.xml. –
Возможно, у вас нет web.xml (новые спецификации сервлета не требуют его, поскольку все можно настроить с помощью аннотаций) –