ViktorMedlem sedan aug. 20021 752 inlägg Hej
Jag har börjat skriva om min sida med Struts och Velocity men har nu stött på ett problem. Tidigare när jag har kört på JSP så har jag högst upp på varje sida lagt in en tagg som kollar om man är inloggad, är man inte det så kollar den om man har en cookie och loggar in en om man har det. Problemet nu är hur man ska kunna göra samma sak med Velocity och Struts (eller på något annat sätt). En auto login funktion är det som jag söker altså :)
/Viktor
ViktorMedlem sedan aug. 20021 752 inlägg Har äntligen kommit fram till en lösning som jag tycker känns bra :)
Jag skapar ett filter som används för varje request och där loggar jag in användaren om den har en cookie och inte är inloggad (auto-logon löst), jag kollar samtidigt om den har rätt att använda de resurser som finns i katalogen som den försöker accessa.
/Viktor
SkyMedlem sedan maj 2003103 inlägg Nyfiken..
Skapar du ett eget filter eller använder du dig av tex securityfilter?
ViktorMedlem sedan aug. 20021 752 inlägg Kör med helt egenskrivna metoder, kanske inte de bästa men duger för mig :)
Såhär blev de viktiga delarna av koden,
Accesslist.xml
<accesslist>
<access directory="/admin/" level="3"/>
<access directory="/f1video/" level="2"/>
</accesslist>
ServletContextListener
List accessList=new ArrayList();
DefaultHandler handler = new AccessListHandler(accessList);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(event.getServletContext().getRealPath("/")+"/WEB-INF/accesslist.xml",handler);
event.getServletContext().setAttribute("access-list",accessList);
Directory
public int compareTo(Object obj)
{
Directory dir=null;
if(obj instanceof Directory)
{
dir=(Directory)obj;
if(dir.directory.startsWith(this.directory))
{
return(0);
}
}
return(((Directory)obj).directory.compareTo(this.directory));
}
AccessFilter
if(((HttpServletRequest)request).getSession().getAttribute(Constants.USER_KEY)==null)
{
//TODO: kolla om logon cookie finns
System.out.println("Logon Guest");
((HttpServletRequest)request).getSession().setAttribute(Constants.USER_KEY,
new User(-1,"guest",1,"none@none.none"));
}
Directory tmpDir=new Directory(((HttpServletRequest)request).getServletPath(),
((User)((HttpServletRequest)request).getSession().getAttribute(Constants.USER_KEY)).getAccessLevel());
Iterator iter=accessList.iterator();
while(iter.hasNext())
{
Directory dir=(Directory)iter.next();
if((dir.compareTo(tmpDir))==0)
{
if(tmpDir.getLevel()<dir.getLevel())
{
request.getRequestDispatcher("/member/logon.vm").forward(request,response);
return;
}
break;
}
}
chain.doFilter(request,response);
/Viktor