2016-05-22 4 views
1

Мне нужно установить идентификатор пользователя в качестве атрибута сеанса после входа в систему, используя модуль ввода формы Java EE.Установить атрибут сеанса после входа в систему

Сейчас, после входа в систему, я отправляю еще один HTTP-запрос, который устанавливает ID как атрибут сеанса, но мне нужно сделать это за один шаг. Каков наилучший способ сделать это?

конфигурация Войти модуля в standalone.xml:

<login-module code="com.MyLoginModule" flag="required"> 
    <module-option name="dsJndiName" value="java:/PostgresDS"/> 
    <module-option name="principalsQuery" value="select password from appuser where email=?"/> 
    <module-option name="rolesQuery" value="select 'AUTHENTICATED', 'Roles' from appuser where email=?"/> 
    <module-option name="hashAlgorithm" value="custom"/> 
</login-module> 

Дополнительный запрос после входа в систему (Resteasy):

@GET 
@Path("/web") 
@Produces(MediaType.APPLICATION_JSON) 
public User getUser(@Context HttpServletRequest hsr) throws MyRuntimeException{ 
    User u; 
    HttpSession session = hsr.getSession(); 
    u = um.getUserByMail(hsr.getUserPrincipal().getName()); 
    session.setAttribute("userId", u.getId()); 
    return u; 
} 

MyLoginModule:

public class MyLoginModule extends DatabaseServerLoginModule { 
@Override 
public String createPasswordHash(String username, String password, String digestOption){code} 
} 

ответ

0

Я полагаю, вы используете JBoss здесь ....

Вы могли бы, например, повысить

org.apache.catalina.authenticator.FormAuthenticator

(используется в качестве стандартного идентифицирующей в JBoss) и реализовать дополнительную логику там.

public class MyFormAuthenticator extends FormAuthenticator{ 

@Override 
public boolean authenticate(Request request,HttpServletResponse response,LoginConfig config){ 
    boolean success = super.authenticate(request,response,config); 
    if(success){ 
     Session session = request.getSessionInternal(false); // Use the existing session 
     session.put .... // the action which you want to do 
    } 
    return success; 
} 

Не забудьте настроить JBoss-web.xml (помещается в папку WEB-INF):

<jboss-web> 
    <context-root>myContext</context-root> 
    <valve> 
    <class-name>MyFormAuthenticator</class-name> 
    </valve> 
</jboss-web> 

Maven

Убедитесь, что вы используете этот Maven Завис (не jboss-as-web):

<dependency> 
    <groupId>org.jboss.web</groupId> 
    <artifactId>jbossweb</artifactId> 
    <version>7.5.10.Final</version> 
</dependency> 
+0

Начиная с WF 8, JBoss больше не использует клапаны, но Undertow http-обработчики. –

Смежные вопросы