webForumDet fria alternativet

AccessBean

15 svar · 778 visningar · startad av AG

AGMedlem sedan mars 20001 229 inlägg
#1

Har börjat arbeta på et böna som jag vill skall returnera ett sant eller falskt värde.
Denna skall användas för att att se om en användre är inloggad, och ifall denna har access till den berörda sidan.
Helst skulle jag vilja kolla på jsp-nivå:

ilia.admin.access.AccessBean ab = new ilia.admin.access.AccessBean();

if (!ab.getAccess()) {
	response.sendRedirect("no_access.jsp");
	return;	
}

och ha en böna i stil med:

package ilia.admin.access;

import ilia.*;
import java.sql.*;
import java.io.*;
import java.util.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;

public class AccessBean {

	ConnectionPool pool = new ConnectionPool(); 
	Connection con = null;

	public boolean getAccess() throws ClassNotFoundException, SQLException{

		int userPermission = 8;
		String URI = "/ilia/access.jsp";
		PreparedStatement pStmt2 = con.prepareStatement("SELECT * FROM admin_access WHERE status = 1 and url = ? and value = value & ?");
		pStmt2.setString(1, URI);
		pStmt2.setInt(2, userPermission);
		ResultSet rs2 = pStmt2.executeQuery();
			
		if(!rs2.next()){
			return false;

		}
		else{
			return true;
		} 
		pool.putConnection(con);

	}
}

Så mina problem är:
1. Hur kan jag få böna att antingen returnera ett true, eller ett false värde.
2. Hur kan jag göra så jag kan använda sessions inne i min böna.
3. Kan jag på något sätt använda, "request.getRequestURI()" inne i bönan?

tack
Andreas

ViktorMedlem sedan aug. 20021 710 inlägg
#2

1. Gör du inte redan det? Om inte så förstår jag inte riktigt frågan :)
2. Skicka med pageContext som en parameter till funktionen i din böna, då kommer du åt allt som du kommer åt i JSP sidan.
3. Se svaret på fråga 2 :)

Sen två saker till, funktionen avslutas direkt efter att du har anroppat return, eftersom du alltid anroppar return, antingen true eller false så kommer koden "pool.putConnection(con);" aldrig att köras och en connection kommer aldrig att lämnat tillbaka, samma sak om något går fel. Kör med try, catch och finally block istället och i t.ex. catch så kan du kasta vidare ett exception om du vill det, men då kommer ändå finally blocket att köras (och där har du "pool.putConnection(con);" koden).

/Viktor

AGMedlem sedan mars 20001 229 inlägg
#3

1. Får felmeddelande, se nedan. Har nu lagt till try, catch, finally också.

package ilia.admin.access;

import ilia.*;
import java.sql.*;
import java.io.*;
import java.util.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;

public class AccessBean {

	ConnectionPool pool = new ConnectionPool(); 
	Connection con = null;

	public boolean getAccess() throws ClassNotFoundException, SQLException{
		try{
			int userPermission = 8;
			String URI = "/ilia/access.jsp";
			PreparedStatement pStmt2 = con.prepareStatement("SELECT * FROM admin_access WHERE status = 1 and url = ? and value = value & ?");
			pStmt2.setString(1, URI);
			pStmt2.setInt(2, userPermission);
			ResultSet rs2 = pStmt2.executeQuery();
			
			if(!rs2.next()){
				return false;
			}
			else{
				return true;
			}
		}
		catch(Exception exp){
			System.out.println(exp);
		}
		finally{
			pool.putConnection(con);
		}

	}
}

2. Hur skall jag skicka med pageContext?

tack
Andreas

ViktorMedlem sedan aug. 20021 710 inlägg
#4

1. Vad? Var?
2. I din böna skriver du såhär,

public boolean getAccess(PageContext context)

(och lägger till importen för PageContext, javax.xxxxx.PageContext)
och i JSP filen skriver du,

if (!ab.getAccess(pageContext)) {
	response.sendRedirect("no_access.jsp");
	return;	
}

/Viktor

AGMedlem sedan mars 20001 229 inlägg
#5

Oops, missade felmeddelande. det skall vara:

:39
missing return statement
}

Andreas

ViktorMedlem sedan aug. 20021 710 inlägg
#6

Eftersom du nu har en catch och en finally så kan programmet hoppa över ditt return statement om något går fel innan det så du måste ha en return i slutet av funktionen också.

		finally{
			pool.putConnection(con);
		}
		return(false); //om något går fel, ge inte access.

	}

/Viktor

AGMedlem sedan mars 20001 229 inlägg
#7

Tack, ligger pagecontext i paketet, "javax.servlet.jsp."?

Andreas

AGMedlem sedan mars 20001 229 inlägg
#8

Får fel i AccessBean, att den inte kan hitta 'request' i 'uri2' med följande kod:

package ilia.admin.access;

import ilia.*;
import java.sql.*;
import java.io.*;
import java.util.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
import javax.servlet.jsp.PageContext;

public class AccessBean {

	ConnectionPool pool = new ConnectionPool(); 
	Connection con = null;

	public boolean getAccess(PageContext context) throws ClassNotFoundException, SQLException{
		try{
			String uri2 = request.getRequestURI();
			int userPermission = 8;
			String URI = "/ilia/access.jsp";
			PreparedStatement pStmt2 = con.prepareStatement("SELECT * FROM admin_access WHERE status = 1 and url = ? and value = value & ?");
			pStmt2.setString(1, URI);
			pStmt2.setInt(2, userPermission);
			ResultSet rs2 = pStmt2.executeQuery();
			
			if(!rs2.next()){
				return false;
			}
			else{
				return true;
			}
		}
		catch(Exception exp){
			System.out.println(exp);
		}
		finally{
			pool.putConnection(con);
		}
		return(false);
	}
}

tack
Andreas

ViktorMedlem sedan aug. 20021 710 inlägg
#9

Java API - PageContext, request blir inte en global variabel för att du skickar med PageContext utan du måste hämta ditt request objekt från din PageContext,

context.getRequest().getRequestURI();

/Viktor

AGMedlem sedan mars 20001 229 inlägg
#10

Tack igen Viktor, men jag hänger inte med.
Skall jag använda något i stil med,
"String uri2 = context.getRequest().getRequestURI();"

Andreas

AGMedlem sedan mars 20001 229 inlägg
#11

Fullständig kod ser nu ut:

package ilia.admin.access;

import ilia.*;
import java.sql.*;
import java.io.*;
import java.util.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
import javax.servlet.jsp.PageContext;

public class AccessBean {

	ConnectionPool pool = new ConnectionPool(); 
	Connection con = null;

	public boolean getAccess(PageContext context) throws ClassNotFoundException, SQLException{
		try{
			String uri2 = context.getRequest().getRequestURI();
			int userPermission = 8;
			String URI = "/ilia/access.jsp";
			PreparedStatement pStmt2 = con.prepareStatement("SELECT * FROM admin_access WHERE status = 1 and url = ? and value = value & ?");
			pStmt2.setString(1, URI);
			pStmt2.setInt(2, userPermission);
			ResultSet rs2 = pStmt2.executeQuery();
			
			if(!rs2.next()){
				return false;
			}
			else{
				return true;
			}
		}
		catch(Exception exp){
			System.out.println(exp);
		}
		finally{
			pool.putConnection(con);
		}
		return(false);
	}
}

Genererar fel:

ilia/admin/access/AccessBean.java:19: cannot find symbol
symbol : method getRequestURI()
location : interface javax.servlet.ServletRequest
String uri2 = context.getRequest().getRequestURI();
1 error

tack
Andreas

antilizaerMedlem sedan apr. 200358 inlägg
#12

Du måste casta om ServletRequest objektet till ett HttpServletRequest objekt för att använda dig av getRequestURI() metoden.

String uri2 = ((HttpServletRequest)context.getRequest()).getRequestURI();
AGMedlem sedan mars 20001 229 inlägg
#13

Nepp, får nu fel:

C:\Tomcat 5.5\webapps\ilia\WEB-INF\classes>javac ilia/admin/access/AccessBean.ja
va
ilia/admin/access/AccessBean.java:20: cannot find symbol
symbol  : class HttpServletRequest
location: class ilia.admin.access.AccessBean
                        String uri2 = ((HttpServletRequest)context.getRequest())
.getRequestURI();
                                        ^
1 error

Andreas

ViktorMedlem sedan aug. 20021 710 inlägg
#14

Har du importerat HttpServletRequest i din java fil?

import javax.servlet.http.HttpServletRequest

/Viktor

AGMedlem sedan mars 20001 229 inlägg
#15

Skumt importerade "import javax.servlet.*;" då fungerade inte, men när jag specifierade som du beskrev Viktor så fungerade det. Tack.
Hur gör jag nu lättas för att hämta session-värden?

Andreas

ViktorMedlem sedan aug. 20021 710 inlägg
#16

AG skrev:

Skumt importerade "import javax.servlet.*;" då fungerade inte, men när jag specifierade som du beskrev Viktor så fungerade det. Tack.

HttpServletRequest ligger inte i det paketet utan i

import javax.servlet[b].http.[/b]HttpServletRequest

AG skrev:

Hur gör jag nu lättas för att hämta session-värden?

HttpSession session=((HttpServletRequest)context.getRequest()).getSession();
System.out.println(session.getAttribute("Kalle"));

/Viktor

133 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
130 ms — hämta tråd, inlägg och bilagor (db)