2012-04-30 22 views
0

jboss-seam-2.2.0.GA、認証プロセスクラスを認証するために認証クラスを使用しています。私は、ユーザー名とパスワードを入力し、ページを送信すると、私は私のログに次のエラーメッセージを取得しています:SEAM内でターゲットに到達できません、識別子 '認証者'がnullに解決されました

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
xmlns:s="http://jboss.com/products/seam/taglib" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:rich="http://richfaces.org/rich" template="layout/noMenuTemplate.xhtml"> 
<ui:define name="body"> 
    <div id="content"> 
       <h:form id="loginForm"> 
     <rich:panel> 
      <f:facet name="header">Login</f:facet> 
      <h:messages /> 
<div class="dialog"><h:panelGrid columns="2" rowClasses="prop" 
       columnClasses="name,value"> 
       <h:outputLabel for="username">Username</h:outputLabel> 
       <h:inputText id="username" value="#{credentials.username}" 
        style="width: 150px;" /> 
       <h:outputLabel for="password">Password</h:outputLabel> 
       <h:inputSecret id="password" value="#{credentials.password}" 
        style="width: 150px;" /> 
      </h:panelGrid></div> 

      <div class="actionButtons"><h:commandButton id="submit" 
       styleClass="button" value="Login" action="#{authenticator.login()}" /></div> 
     </rich:panel> 
     </h:form> 
      </div> 
</ui:define> 
</ui:composition> 

Authenticator.java

@Name("authenticator") 
@AutoCreate 
public class Authenticator {  
    @Logger Log log; 
    @In Identity identity; 
    @In Credentials credentials; 
    @In Session hibernateSession; 

    public Authenticator() {} 

    public void login() throws IOException { 
     log.debug("calling login method ............... "); 

     HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 

     StringBuffer location = new StringBuffer(request.getContextPath()); 
     location.append("/j_security_check?j_username="); 
     location.append((credentials.getUsername() != null) ? credentials.getUsername() : ""); 
     location.append("&j_password="); 
     location.append((credentials.getPassword() != null) ? credentials.getPassword() : ""); 

     log.debug("LOCATION : " + location.toString()); 

     HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
     response.sendRedirect(response.encodeRedirectURL(location.toString()));  
    } 
} 
:後

 
application E javax.el.PropertyNotFoundException: /login.xhtml @27,76 action="#{authenticator.login()}": Target Unreachable, identifier 'authenticator' resolved to null 
javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /login.xhtml @27,76 action="#{authenticator.login()}": Target Unreachable, identifier 'authenticator' resolved to null 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
at javax.faces.component.UICommand.broadcast(UICommand.java:387) 

コードです

答えて

0

Authenticatorクラスが正しく実装されているようです。私はさらにあなたのログで検索し、なぜそれが作成されていないかを調べるでしょう。

また、components.xmlから関連するセクションを投稿することをお勧めします。次のようになります。

<security:identity authenticate-method="#{authenticator.login}"/> 
+0

<セキュリティ:アイデンティティ認証-法= "#{} authenticator.authenticate" 覚えて、私= "true" をJAAS-config設定名= "myloginを" /> components.xmlで – Manohar

+0

あなたは '#{authenticator.authenticate}'を呼び出すように指示していますが、Authenticatorクラスには 'authenticate()'メソッドがありません。これを '#{authenticator.login}'に変更してみてください –

関連する問題