Hello,
Kezdem magam beleásni a $subj. rejtelmeibe. Néhány gyakorlati tanácsra lenne szükségem:
1. Hogy tároljam a már authentikált userem adatait session szinten (alapadatok, user profile) ?
2. Ugyanez a kérdés az alkalmazás szintű paramétereket kezelésére.
Gyakorlati megoldások érdekelnének elsősorban, de egy linknek is örülnék.
Köszi.
3. Spring Security annotations
A doksik alapján próbáltam összerakni, de nem működik a @Secured annotáció. Az @AuthorizeInstantiation("ROLE_ADMIN") viszont igen.
Ne várjam, h az első változat menjen, mert itt már csak a wicket-auth játszik ?
Köszi.
- 4603 megtekintés
Hozzászólások
1. Bevagod a adatokat tartalmazo bean-t sessionba.
2. Bevagod a adatokat tartalmazo bean-t servletcontext-be.
get/setAttribute()...
Kulcsszavak: wicket+servlet+session, wicket+servletcontext...
----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
- A hozzászóláshoz be kell jelentkezni
Köszönöm. Ez a wicket saját session kezelésén "kívül" esik, ha jól értem ?
- A hozzászóláshoz be kell jelentkezni
Tudsz saját session objektumot csinálni, amivel azt csinálsz amit akarsz:
public class MySession extends WebSession {
public MySession(Request request) {
super(request);
}
private String myString;
private Date myDate;
private CustomOwnObject myCustomObject;
// ... getters and setters
}
Application class-ban:
@Override
public Session newSession(Request request, Response response) {
return new MySession(request);
}
Aztán bárhonnan elérheted a kódból:
MySession session = (MySession )WebSession.get();
- A hozzászóláshoz be kell jelentkezni
Atom. Működik :).
- A hozzászóláshoz be kell jelentkezni
3.
Spring bean-eknél működik a @Secured.
pl.
public class SimplePage extends WebPage {
@SpringBean
private SpringService helloService;
ahol a service
import org.springframework.security.access.annotation.Secured;
@Secured("ROLE_ADMIN")
public interface SpringService {
String HelloWorld();
}
- A hozzászóláshoz be kell jelentkezni
Létrehoztam egy Application.properties nevű állományt, raktam bele két sort.
application.name=X
application.version=v1.0
public final class LoginPage extends WebPage {
public LoginPage() {
this(null);
}
public LoginPage(final PageParameters parameters) {
add(new LoginForm("loginform"));
String s = new StringResourceModel("application.version",this,null).getString();
add(new Label("appinfo",s));
}
Mindegy mit csinálok, nem bírja megtalálni, mindegy hova rakom a fájlt (resources vagy a webapp ahol a html,css van..).
- A hozzászóláshoz be kell jelentkezni
Itt leirja Igor, hogy hogyan megy a properties betoltes wicket-ben.
- A hozzászóláshoz be kell jelentkezni
Megnéztem Igor mit ír. Értem a koncepciót illetve, hogy a wicket milyen hierarchia szerint tölti be a resource-okat.
Ha berakom a webapp alá, akkor meglátja, de az src/main/resource alá hiába teszem, úgy nem működik.
- A hozzászóláshoz be kell jelentkezni
Pontosan milyen nevvel+utvonalra rakod (projekten belul)?
- A hozzászóláshoz be kell jelentkezni
Ha az src/main/webapp/pages alá rakom, akkor működik, ha az src/main/resources alá, akkor nem. (Nem war csomagolási probléma, mindkét esetben benne van a war-ban a properties fájl).
Mindkét esetben WicketApplication.properties a neve.
- A hozzászóláshoz be kell jelentkezni
Es a war-ba csomagolas soran mindig ugyanoda kerul az Application.properties? Marmint a war-on belul.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Nem. Mindig a "helyén" van.
- A hozzászóláshoz be kell jelentkezni
Gondolom van sajat Application class-od: "src/main/java/foo/bar/FeherApplication.java". Tedd a properties-t ugyanilyen neven a resources-ba: "src/main/resources/foo/bar/FeherApplication.properties". Ezt mar probaltad?
- A hozzászóláshoz be kell jelentkezni
Így működik, köszönöm!
- A hozzászóláshoz be kell jelentkezni
Gyártottam egy menüt:
public class PageWithMenu extends Panel {
public PageWithMenu(String id,List<MenuItem> menu) {
super(id);
RepeatingView rv = new RepeatingView("menu");
add(rv);
for (MenuItem item : menu) {
WebMarkupContainer parent = new WebMarkupContainer(rv.newChildId());
rv.add(parent);
BookmarkablePageLink link = new BookmarkablePageLink("link", item.getDestination());
parent.add(link);
link.add(new Label("caption",item.getCaption()));
}
}
Ehhez a markup:
<wicket:panel>
<ul class="glossymenu">
<li wicket:id="menu" >
<a href="#" wicket:id="link">
<b><span wicket:id="caption"></span></b></a>
</li>
</ul>
</wicket:panel>
Szeretném megoldani, h az egyes menüpontokon bekövetkező onClick-re az adott ul class tulajdonsága current legyen.
A BookMarkableLink-nek nem tudom override-olni az onClick metódusát,a Link meg ugye absztrakt.
Köszi!
- A hozzászóláshoz be kell jelentkezni
Pl. így:
public class MenuPanel extends Panel
{
private static final long serialVersionUID = 1L;
public MenuPanel(String id)
{
super(id);
}
@Override
protected void onInitialize()
{
super.onInitialize();
List<Class<? extends WebPage>> pageClasses = new ArrayList<Class<? extends WebPage>>();
pageClasses.add(FooPage.class);
pageClasses.add(BarPage.class);
RepeatingView menu = new RepeatingView("menu");
add(menu);
for (Class<? extends WebPage> pageClass : pageClasses)
{
WebMarkupContainer item = new WebMarkupContainer(menu.newChildId());
menu.add(item);
Link<Void> link = new BookmarkablePageLink<Void>("link", pageClass);
item.add(link);
if (getPage().getClass().equals(pageClass))
{
link.add(AttributeModifier.append("class", "current"));
}
}
}
}
Ebben az esetben nem onclick-re dől el, hogy kell -e a class, hiszen az oldal példányosításakor már tudod, hogy melyik link tartozik hozzá. Az oldal onInitialize-ban már ismert. (Az "AttributeModifier.append()" lehet, hogy 1.5 only, de ha 1.4-et használsz, akkor abban is meg kell lennie a párjának. Ez a fajta appender nem törli, ha van másik class a linken (pl.: markup-ból), hanem hozzáfűzi a current-et.)
"a Link meg ugye absztrakt"
Attól még nyugodtan lehet használni, ha kell:
new Link<Void>("link")
{
@Override
public void onClick()
{
// TODO Auto-generated method stub
}
}
- A hozzászóláshoz be kell jelentkezni
Köszi!
- A hozzászóláshoz be kell jelentkezni
Es a link-nek nincs onclick handlere? Attol, hogy absztrakt, meg belehivhatsz, ha van ilyen feluleti metodusa.
@Exit: elbokted a nyito kacsacsort az ArrayList-nel.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Forum motor megette. Javitottam.
- A hozzászóláshoz be kell jelentkezni
A legutolso kodreszlet utolso lezaro }-je utan egy pontosvesszo... :D
Egyebkent pont erre gondoltam en is, kit zavar, hogy absztrakt?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
public class PageWithMenu extends Panel {
public PageWithMenu(String id,List menu) {
super(id);
RepeatingView rv = new RepeatingView("menu");
add(rv);
for (MenuItem item : menu) {
WebMarkupContainer parent = new WebMarkupContainer(rv.newChildId());
rv.add(parent);
BookmarkablePageLink link = new BookmarkablePageLink("link", item.getDestination());
parent.add(link);
link.add(new Label("caption",item.getCaption()));
}
}
Ebben az esetben a konstruktorban nem tudtam Link-et hozzáadni, ezért gondoltam, h a Link absztrakt mivolta miatt nem megy.
Mindegy is, @Exit tollából a másik megközelítés lesz a nyerő :)
- A hozzászóláshoz be kell jelentkezni