1

システムの仕組みについて説明します。

ログインとロール管理に JAAS ログイン モジュールを使用しています。役割に応じて特定のページにアクセスできます。

アドレス バーに自分の URL を入力し、Enter キーを押します。

ログイン ページが表示され、正しくログインすると、正しいページにリダイレクトされます (ここでは page1.jsf と呼びます)。

ページの読み込み時にサーバー側のメソッドを呼び出したい。

助けてください。

** 編集 **

role1 のみがアクセスできる page1.jsf にアクセスする必要があるとします。

アドレスバーにhttp://localhost:8080/myapp/page1.jsf と入力します

JAAS がログイン ページを表示し、認証情報を正しく入力すると、page1.jsf にリダイレクトされます

page1.jsf が要求されたとき、またはページの読み込み時にすぐに、クラスからサーバー側のメソッドを呼び出して page1.jsf をリロードしたい

4

2 に答える 2

2

JSF 2 を使用している場合は、上記のページ スニペットを使用できます。

<html xmlns="http://www.w3.org/1999/xhtml"
  ... >
 <f:view contentType="text/html">
    <f:event type="preRenderView" listener="#{permissionManager.checkRoles}" />
    <f:attribute name="roles" value="ROLE" />

  ...
  </f:view>
</html>

ロールを含む属性を追加PermissionManager.checkRoles()し、corret ページへのリダイレクトを実行できます。

@Named
@ApplicationScoped
class PermissionManager { 
  ...
  public void checkRoles(ComponentSystemEvent event) {

       String acl = "" + event.getComponent().getAttributes().get("roles");
       //Check user role
       ...
       //Redirect if required
       try {

        ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context
                .getApplication().getNavigationHandler();
        handler.performNavigation("access-denied");
    } catch (Exception e) {
        ...
    }

   }

}

この例をチェックして、この関連する質問 を見てください

于 2012-04-23T07:21:05.397 に答える
0

はい、これは機能します。jsp または jsf ページにアクセスする代わりに、サーブレットにアクセスすることもできます。したがって、新しいサーブレットを作成します。例えば:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TestServlet
 */
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;


    public static void yourMethod() {
         // do something useful
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        yourMethod();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

次に、サーブレットを / にマップするために、web.xml ファイルに新しいエントリを作成します。

<servlet>
    <display-name>TestServlet</display-name>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>your.packages.TestServlet</servlet-class>
  </servlet>  
  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
  </servlet-mapping>

この後、メソッドを呼び出す を呼び出すことができるはずですlocalhost:8080/TestServlet

于 2012-04-23T07:16:00.197 に答える