« U-Bahn | Main | Tools on *nix »

Mittwoch, Juli 27, 2011

GWT secured

Mann mann mann - choose your filter carefully: Ich brauche einige Versuche und kostbare Zeit um die GWT-SpringSecurity-Verknüpfung hinzukriegen - nun gehts:

Das hier verlangt für den allgemeinen Zugriff "/" (also auch die Anmeldungsseite!) einen anonymen User, sonst einen angemeldeten User und für "/mbopac/admin" eben einen Admin:

<http access-denied-page="/access-denied.html">

<intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY" />

<intercept-url pattern="/mbopac/admin/**" access="ROLE_ADMIN" />

<intercept-url pattern="/**" access="ROLE_USER" />

<form-login login-page="/login.html" default-target-url="/Mbopac.html"

always-use-default-target='true' />

</http>

Das o.g. Tutorial ist ganz nett weil es Spring Security und GWT vereint, aber es läuft nicht auf der AppEngine: Das Problem ist die Spring autogenerierte Login-Seite, eine einfache eigene Seite "login.html" und Konfiguration in applicationContext.xml hilft dann endlich:

<html>

<head>

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<link type="text/css" rel="stylesheet" href="Mbopac.css">

<title>OPAC Medienboten B&uuml;cherhallen Hamburg</title>

</head>

<body>

<h2>Bitte melden Sie sich an.</h2><br>

<form method="POST" action="j_spring_security_check">

Benutzer: <input type="text" name="j_username"><br>

Passwort: <input type="password" name="j_password"><br>

<input type='checkbox' name='_spring_security_remember_me'/> Auf diesem Computer eingeloggt bleiben?.<br>

<input type="submit" value="Anmelden >>">

</form>

</body>

</html>

Mit diesem Tipp und einer Ableitungsebene mehr ist dann auch Springkonfiguration mit autowire erhältlich:

public class SpringGwtServlet extends RemoteServiceServlet {

@Override

public void init(ServletConfig config) throws ServletException {

super.init(config);

WebApplicationContextUtils.

getRequiredWebApplicationContext(getServletContext()).

getAutowireCapableBeanFactory().

autowireBean(this);

}

}

Das hier (Double brace initialization) mag ja nett aussehen ist aber too "cute":

final Set<String> rolesAdmin = new HashSet<String>() {
{
add(CustomAuthenticationProvider.ROLE_USER);
add(CustomAuthenticationProvider.ROLE_ADMIN);
}
};

Es ist hat eben die Implementierungsdetails, dass das erste Klammerpaar eine anonyme Innerclass erzeugt und das zweite Paar einen static initializer deklariert: Somit ist die Klasse unbekannt wird im Serialisierungskosmos von GWT hiermit quittiert:

[ERROR] javax.servlet.ServletContext log: Exception while dispatching incoming RPC call

com.google.gwt.user.client.rpc.SerializationException: Type 'de.tixus.mb.opac.server.DataImporter$1' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = [ROLE_ADMIN, ROLE_USER]

Erstellt von tixus um 7:11 PM Kategorien: Software + Java
Powered by
Thingamablog 1.1b6