powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JEE: Кастомная форма авторизации через AS
3 сообщений из 3, страница 1 из 1
JEE: Кастомная форма авторизации через AS
    #39433420
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что сделал:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
package com.mezoline.bean;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;


@ManagedBean
@RequestScoped
public class LoginView {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String action()
    {
        try {
            HttpServletRequest request = (HttpServletRequest) FacesContext
                    .getCurrentInstance()
                    .getExternalContext()
                    .getRequest();

            request.login(username, password);

        } catch (ServletException e) {
            FacesContext.getCurrentInstance().addMessage("login-form:username",
                    new FacesMessage("Incorrect login or password"));
            return "/login";
        }
        return "/index?faces-redirect=true";
    }
}



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
<ui:composition template="/WEB-INF/views/layouts/main.xhtml"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:c="http://java.sun.com/jsp/jstl/core"
>

    <ui:define name="content">
        <p:panel header="Login From">
            <h:form method="post" class="form-horizontal" id="login-form">
                <h:messages style="color:red;margin:8px;" />
                <div class="form-group">
                    <label class="control-label col-sm-2">Username:</label>
                    <div class="col-sm-10">
                        <h:inputText id="username" value="#{loginView.username}" />
                    </div>
                </div>
                <div class="form-group">
                    <label class="control-label col-sm-2">Password:</label>
                    <div class="col-sm-10">
                        <h:inputText id="password" value="#{loginView.password}" />
                    </div>
                </div>
                <div class="form-group">
                    <p:captcha label="Captcha" />
                </div>
                <div class="form-group">
                    <div class="col-sm-offset-2 col-sm-10">
                        <h:commandButton action="#{loginView.action}" value="Login" />
                    </div>
                </div>
            </h:form>
        </p:panel>
    </ui:define>

</ui:composition>



Нормально ли так вообще делать?

Код: java
1.
2.
3.
4.
            HttpServletRequest request = (HttpServletRequest) FacesContext
                    .getCurrentInstance()
                    .getExternalContext()
                    .getRequest();



Через контекст почему-то не инъектится.

Код: java
1.
@Context private HttpServletRequest request; 



Через @Inject работает, но Intellij выдает предупреждение, что так не хорошо делать.
...
Рейтинг: 0 / 0
JEE: Кастомная форма авторизации через AS
    #39433681
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот с формой регистрацией как-то не однозначно.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
package com.mezoline.bean;

import com.mezoline.domain.Role;
import com.mezoline.domain.User;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.*;
import java.util.ArrayList;

@ManagedBean
public class RegisterView {

    @PersistenceContext
    private EntityManager entityManager;

    @Resource
    private UserTransaction userTransaction;

    @ManagedProperty(value = "#{user}")
    private User user;

    public void setUser(User user) {
        this.user = user;
    }

    public String submit() {
        try {
            userTransaction.begin();
            System.out.println(User.existsByName(entityManager, user.getName()));

            if (User.existsByName(entityManager, user.getName())) {
                FacesContext.getCurrentInstance().addMessage("login-form:username",
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "This user already exists"));
                return "";
            }

            Role role = new Role();
            role.setRole_Name(Role.Name.USER);
            role.setUser_name(user.getName());
            ArrayList<Role> roles = new ArrayList<>();
            roles.add(role);
            user.setRoles(roles);
            
            entityManager.persist(user);
            userTransaction.commit();

        } catch (SystemException | NotSupportedException | RollbackException
                | HeuristicMixedException | HeuristicRollbackException e) {

            FacesContext.getCurrentInstance().addMessage("login-form:username",
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, "Sorry", "Error occurred"));
        }

        return "/login";
    }

}



Можно ли это сделать как-то проще?

Код: java
1.
2.
                FacesContext.getCurrentInstance().addMessage("login-form:username",
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "This user already exists"));



Пробовал кидать исключенеи ValidationException из
...
Рейтинг: 0 / 0
JEE: Кастомная форма авторизации через AS
    #39433682
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал кидать

Код: java
1.
        throw  new ValidatorException(new FacesMessage("1", "2"));



Но он результат не тот, что хотелось бы. А с добавлением ошибки через FacesContext как-то громоздко.


Это тоже не нравится

Код: java
1.
2.
3.
4.
5.
6.
            Role role = new Role();
            role.setRole_Name(Role.Name.USER);
            role.setUser_name(user.getName());
            ArrayList<Role> roles = new ArrayList<>();
            roles.add(role);
            user.setRoles(roles);



Можно ли записать как-то проще?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JEE: Кастомная форма авторизации через AS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]