webForumDet fria alternativet

Auto login med Velocity och Struts

3 svar · 354 visningar · startad av Viktor

ViktorMedlem sedan aug. 20021 752 inlägg
#1

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
#2

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
#3

Nyfiken..
Skapar du ett eget filter eller använder du dig av tex securityfilter?

ViktorMedlem sedan aug. 20021 752 inlägg
#4

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

131 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)