Я реализую свой собственный механизм аутентификации, и я хочу знать, правильно ли то, что я делаю, и если нет, то как я могу сделать это правильно.
Сначала расскажу, как работает мой механизм аутентификации:
-Данные моих пользователей находятся внутри объекта под названием Роль. Этот объект содержит 3 поля:
Адрес электронной почты: String
пароль: String
UserType: Enum
-При доступе пользователя к системе роль объекта сохраняется в сеансе.
У меня вопрос: как я могу ограничить доступ к определенным страницам для пользователей (роль) на основе их полей userType
?
Это то, что я делаю, но не работает.
Сначала у меня есть управляемый компонент, который проверяет, зарегистрирован ли usser.
@ManagedBean
@RequestScoped
public class SecurityController {
//Some attributes...
public String redirectNotBuyer() {
Role role = (Role) FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("userRole");
//Checks if user is logged
if (role == null) {
// Please login
//Add message to authentification
return "login.xhtml";
} else if (role != null) {
if (!role.getType().toString().equalsIgnoreCase("BUYER")) {
// Buyer not authorized
return "main.xhtml";
}
}
return null;
}
public String redirectNotSeller() {
Role role = (Role) FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("userRole");
if (role == null) {
// Please login
//Add message to authentification
return "login.xhtml";
} else if (role != null) {
if (!role.getType().toString().equalsIgnoreCase("SELLERs")) {
// Buyer not authorized
return "main.xhtml";
}
}
return null;
}
//Getters, setters...
Перечисленные выше два метода перенаправляются в случае, если пользователь не является Покупателем, а в случае, если пользователь не является продавцом.
Так что теперь я делаю на странице, на которую я не хочу, чтобы пользователь заходил, я вызываю один из этих методов, поэтому пользователь перенаправляется на главную страницу.
Пример: не авторизованный пользователь входит на страницу с именем buyOffer.xhtml, доступ к которой имеют только ПОКУПАТЕЛИ:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="WEB-INF/templates/BasicTemplate.xhtml">
<!-- THE REGISTRATION FORM -->
<ui:define name="buyOfferForm">
<h2>Buy offer</h2>
#{SecurityController.redirectNotBuyer()}
</ui:define>
</ui:composition>
</html>
По какой-то причине, когда я захожу на эту страницу с не авторизованным пользователем или пользователем, у которого нет BUYER в качестве userType, он не перенаправляется на страницу main.xhtml. Почему это так?