Срок действия страницы в Java (калитка)

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

public class MyApplication extends WebApplication {

    private Folder uploadFolder = null;

    @Override
    public Class getHomePage() {
        return UserHome.class;
    }

    public Folder getUploadFolder()
    {
        return uploadFolder;
    }

    @Override
    protected void init() {
        super.init();

        // Disable the Ajax debug label!
        //getDebugSettings().setAjaxDebugModeEnabled(false);


        this.getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
        this.getRequestCycleSettings().setResponseRequestEncoding("UTF-8");
        mountBookmarkablePage("/BossPage", BossPage.class);
        mountBookmarkablePage("/Branch", EditProfile.class);
        mountBookmarkablePage("/SA", SuperAdmin.class);
        mountBookmarkablePage("/Admin", ir.pnusn.branch.ui.pages.administratorPages.EditProfile.class);
        mountBookmarkablePage("/Student", StudentSignUP.class);
        mountBookmarkablePage("/Student/Test", StudentSignUpConfirm.class);
        mountBookmarkablePage("/Branch/categories.xml", CategoriesXML.class);

        get().getPageSettings().setAutomaticMultiWindowSupport(true);
        getResourceSettings().setThrowExceptionOnMissingResource(false);
        uploadFolder = new Folder("C:\\", "wicket-uploads");
        uploadFolder.mkdirs();

        this.getSecuritySettings().setAuthorizationStrategy(WiaAuthorizationStrategy.getInstance());
        this.getSecuritySettings().setUnauthorizedComponentInstantiationListener(WiaAuthorizationStrategy.getInstance());
        addComponentInstantiationListener(new IComponentInstantiationListener() {

            public void onInstantiation(final Component component) {
                if (!getSecuritySettings().getAuthorizationStrategy().isInstantiationAuthorized(component.getClass())) {
                    try {
                        getSecuritySettings().getUnauthorizedComponentInstantiationListener().onUnauthorizedInstantiation(component);
                    } catch (Exception e) {
                        System.out.println("ERRORRRRRRR:" + e.toString());
                    }
                }
            }
        });

    }
}

и мой класс WiaAuthorizationStrategy подобен этому, который будет получать имена страниц и роли пользователей из файла xml по имени Realm.xml:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ir.pnusn.ui.library;

import ir.pnusn.authentication.RealmPolicy;
import ir.pnusn.authentication.ui.pages.Login;
import org.apache.wicket.Component;
import org.apache.wicket.RestartResponseAtInterceptPageException;
import org.apache.wicket.authorization.Action;
import org.apache.wicket.authorization.IAuthorizationStrategy;
import org.apache.wicket.authorization.IUnauthorizedComponentInstantiationListener;

public final class WiaAuthorizationStrategy implements
        IAuthorizationStrategy,
        IUnauthorizedComponentInstantiationListener {

    private RealmPolicy roleManager;
    private static WiaAuthorizationStrategy instance;

    private WiaAuthorizationStrategy() {
        roleManager = RealmPolicy.getInstance();
    }

    public static WiaAuthorizationStrategy getInstance() {
        if(instance == null)
            instance = new WiaAuthorizationStrategy();
        return instance;
    }

    public boolean isInstantiationAuthorized(Class componentClass) {

        if (ProtectedPage.class.isAssignableFrom(componentClass)) {
            if (WiaSession.get().getUser() == null) {
                return false;
            }
            if(!roleManager.isAuthorized(WiaSession.get().getUser().getRole(), componentClass.getName()))//WiaSession.get().isAuthenticated();
            {
                WiaSession.get().setAccess(false);
                return false;
            }
            else
                return true;
        }

        return true;
    }

    public void onUnauthorizedInstantiation(Component component) {
        throw new RestartResponseAtInterceptPageException(
                Login.class);
    }

    public boolean isActionAuthorized(Component component, Action action) {
        //System.out.println("Name:" + component.getClass().getName() + "\n Action:" + action.getName() + "\nUser:" + WiaSession.get().getUser());
        if (action.equals(Component.RENDER)) {
            if (roleManager.containClass(component.getClass().getName()))
             {
                if (WiaSession.get().getUser() != null) {
                    if(!roleManager.isAuthorized(WiaSession.get().getUser().getRole(), component.getClass().getName()))
                    {
                        WiaSession.get().setAccess(false);
                        return false;
                    }
                    return true;
                }
                return false;
            }
        }
        return true;
    }
}

в этой ситуации у меня есть googlemap на одной из моих защищенных страниц, и поскольку googlemap необходимо считывать данные для загрузки сборки из xml, поэтому я создаю сервлет, который будет создавать его динамически в зависимости от имени пользователя. этот сервлет ниже:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ir.pnusn.branch.ui.pages;

import ir.pnusn.branch.database.BranchNotFoundException;



import ir.pnusn.branch.database.DatabaseException;
import ir.pnusn.branch.facade.admin.branchDataEnter.BranchDataSubmitFacade;
import ir.pnusn.branch.facade.admin.branchDataEnter.BuildingBean;


import java.util.Iterator;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.RequestCycle;
import org.apache.wicket.markup.html.WebPage;

/**
 *
 * @author mohammad
 */
public class CategoriesXML extends WebPage
{

    public CategoriesXML(PageParameters parameters)
    {
        System.out.println("user " + parameters.getString("user"));
        StringBuilder builder = new StringBuilder("<markers>");
        List<BuildingBean> buildings;
        try
        {
            buildings = BranchDataSubmitFacade.createBranchDataSubmitFacade(parameters.getString("user")).getBranchSecondPageData();
            for (Iterator<BuildingBean> it = buildings.iterator(); it.hasNext();)
            {
                BuildingBean buildingBean = it.next();
                builder.append("<marker lat=\"");
                builder.append(buildingBean.getLatit());
                builder.append("\" lng=\"");
                builder.append(buildingBean.getLongit());
                builder.append("\"");
                builder.append(" address=\"");
                builder.append(buildingBean.getDesctiption());
                builder.append("\" category=\"branch\" name=\"");
                builder.append(buildingBean.getBuildingName());
                builder.append("\"/>");

            }
            builder.append("</markers>");

        }
        catch (DatabaseException ex)
        {
            builder = new StringBuilder("<markers></markers>");
        }
        catch (BranchNotFoundException ex)
        {
            builder = new StringBuilder("<markers></markers>");
        }
        RequestCycle.get().getResponse().println(builder.toString());
        /*"<markers>" +
        "<marker lat=\"35.69187\" lng=\"51.413269\" address=\"Some stuff to display in the First Info Window\"  category=\"branch\" name=\"gholi\"/>" +
        "<marker lat=\"52.91892\"  lng=\"78.89231\" address=\"Some stuff to display in the Second Info Window\" category=\"branch\" name=\"taghi\"/>" +
        "<marker lat=\"40.82589\"  lng=\"35.10040\" address=\"Some stuff to display in the Third Info Window\"  category=\"branch\" name=\"naghi\"/>" +
        "</markers> "**/
    }
}

Сначала я сделал эту страницу защищенной, и поэтому пользователю пришлось войти в систему, чтобы получить доступ к этому xml, но после множества отладок я обнаружил, что googlemap не может войти в мою систему, поэтому вместо анализа dataxml он анализирует страницу входа в систему html az input . поэтому я изменил расширение CategoriesXML, чтобы расширить WebPage. Но теперь у меня другая проблема: когда я перехожу на страницу карты Google на своем сайте в социальной сети, я не могу обновить страницу, потому что срок ее действия истекает, и поэтому я не могу добавить другое здание в свой xml данных. Что я должен делать? скажите мне, если вам нужно больше кода или информации


person JGC    schedule 22.07.2009    source источник
comment
Вы думали сделать свою страницу без гражданства?   -  person Gaël Marziou    schedule 23.07.2009
comment
Инициализируйте StringBuilder до предполагаемой максимальной емкости, чтобы избежать многократного изменения размеров массива. А еще лучше прислушайтесь к совету Тима и полностью устраните его, используя фреймворк. Подробнее см. описание метода добавления здесь: docjar.com/html. /api/java/lang/StringBuilder.java.html   -  person Dave Jarvis    schedule 25.07.2009


Ответы (2)


Пытаясь закрыть этот вопрос, от которого ОП, похоже, отказался, я просто опубликую свой старый комментарий в качестве ответа..:

В вашем CategoriesXML я бы настоятельно не советовал создавать и добавлять ваши теги в виде строк и добавлять их на страницы просто так. Посмотрите, можете ли вы вместо этого преобразовать это в файл .xml (?), Поскольку это способ Wicket делать что-то (и, как таковой, просто может решить проблемы, которые у вас есть)

person Tim    schedule 14.10.2009

Будет ли создание этой веб-страницы расширять org.apache.wicket.Page вместо этого и связывать разметку для возврата в виде xml вместо html? По сути, имитируя веб-страницу, но реализуя ее для XML.

person Matt    schedule 11.11.2009