Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JEE: Кастомная форма авторизации через AS / 3 сообщений из 3, страница 1 из 1
05.04.2017, 12:28
    #39433420
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JEE: Кастомная форма авторизации через AS
Вот что сделал:

Код: 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
05.04.2017, 17:34
    #39433681
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JEE: Кастомная форма авторизации через AS
Вот с формой регистрацией как-то не однозначно.

Код: 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
05.04.2017, 17:36
    #39433682
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JEE: Кастомная форма авторизации через AS
Пробовал кидать

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


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