2016-01-26 6 views
1

Я использую первичную и весеннюю безопасность Метод, описанный ниже в моем бэкбоне, работает хорошо. Он вызывает службу пользовательских данных и аутентифицирует или отклоняет попытки входа в систему. Моя проблема связана с перенаправлением. Каков правильный способ перенаправления пользователя на нужную страницу после авторизации? В настоящее время я вижу, что пользователь аутентифицирован, но все же отображается форма входа в систему.Невозможно перенаправить пользователя после успешного входа в систему

public String login(){ 

    try{ 
     Authentication request = new UsernamePasswordAuthenticationToken(this.getUsername(), this.getPassword()); 
     Authentication result = authenticationManager.authenticate(request); 
     SecurityContextHolder.getContext().setAuthentication(result); 
    } 
    catch(Exception e){ 

     e.printStackTrace(); 
     return "incorrect"; 
    } 
return "correct"; 

} 



<http auto-config="true"> 

    <intercept-url pattern="/web/*" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <intercept-url pattern="/**" access="ROLE_USER" /> 

    <form-login login-page="/web/login.xhtml" 
     default-target-url="/main.xhtml" 
    always-use-default-target="true"  /> 

</http> 

<authentication-manager alias="authenticationManager"> 

     <authentication-provider user-service-ref="kullaniciDetayServisi" /> 

</authentication-manager> 




</beans:beans> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head> 
</h:head> 
<h:body> 
    <div align="center" style=""> 
     <h:form id="loginFormId" prependId="false"> 
       <div id="loginFieldsPnlId"> 
        <div id="loginFieldUsrContId"> 
         <h:outputText id="outTxtUserNameId" value="Username: " name="outTxtUserNameNm"></h:outputText> 
         <h:inputText id="userName" required="true" value="#{loginBean.username}" requiredMessage="Please enter username"></h:inputText> 
         <h:outputLabel id="outLblUserNameId" for="userName" name="outLblUserNameNm"></h:outputLabel> 
        </div> 
        <div id="loginFieldPassContId"> 
         <h:outputText id="outTxtPasswordId" value="Password: " name="outTxtPasswordNm"></h:outputText> 
         <h:inputSecret id="password" required="true" value="#{loginBean.password}" requiredMessage="Please enter password" name="inTxtPasswordNm"></h:inputSecret> 
         <h:outputLabel id="outLblPasswordId" for="password" name="outLblPasswordNm"></h:outputLabel> 
        </div> 
       </div> 
       <div id="loginBtnPanelId"> 
        <h:commandButton id="btnLoginId" value="Login" action="#{loginBean.login}" ajax="false"></h:commandButton> 
        <h:commandButton id="btnCancelId" value="Cancel" action="#{loginBean.cancel}" immediate="true" update="loginFormId" ajax="false"></h:commandButton> 
       </div> 
     </h:form> 
    </div> 
    <div> 
     <h:messages></h:messages> 
    </div> 
</h:body> 
</html> 
+0

Как это PrimeFaces связаны? Работает ли он с простым jsf? – Kukeltje

+0

Это то же самое с простым jsf. Я добавил нашу форму для входа. PF является интерфейсной библиотекой проекта – desperado06

+0

Если это не удается с помощью простого JSF, я удалю тэг PrimeFaces и, пожалуйста, создайте [mcve] – Kukeltje

ответ

1

Похоже, вы забыли карту correct и incorrect путь внутри методов контроллера.

Если я хочу, чтобы перенаправить, чем я мог бы использовать

return "redirect:/correct/" + user.getUserName(); 

И справиться с этим новым запросом в новом методе контроллера, отображающий этот новый запрос. или

return "redirect:/incorrect" 

Возвращение что-то подобное из метода контроллера, которые обрабатывают запрос авторизации.

или

Используя соответствующие правила навигации в /web/WEB-INF/faces-config.xml для JSF, как это:

<?xml version='1.0' encoding='UTF-8'?> 
<faces-config version="2.2" 
       xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> 
    <navigation-rule> 
     <from-view-id>/index.xhtml</from-view-id> 
     <navigation-case> 
      <from-outcome>incorrect</from-outcome> 
      <to-view-id>/failure.xhtml</to-view-id> 
     </navigation-case> 
     <navigation-case> 
      <from-outcome>correct</from-outcome> 
      <to-view-id>/sucess.xhtml</to-view-id> 
     </navigation-case> 
    </navigation-rule> 
</faces-config> 
+1

return "/main.xhtml?faces-redirect=true"; сделал трюк для меня. Спасибо, Рохит. Ты сделал свой день. – desperado06

+0

хорошо. надеюсь, что я правильно это сделал – desperado06

+0

' /greeting.xhtml <навигация-случай> success /response.xhtml ' Для JSF конкретных деталей смотрите на этой официальной документации [] (https://docs.oracle.com/javaee/7/ учебник/JSF-intro005.htm). Не следует использовать этот трюк. Должно обрабатывать событие должным образом. – abcdef12