Browsed by
Tag: web

Apache Shiro part 2 – securing a JSF Java EE 7 application

Apache Shiro part 2 – securing a JSF Java EE 7 application

apache shiro logo

In the first part I described why I chose Apache Shiro as an Authentication framework. In this part I will describe the simplest working solution to secure a Java EE7 application with JSF/Primefaces frontend. To be honest I wont use much of Primefaces in this sample but the application for which I did this research uses it so I added the dependency here and added an Primefaces component to this demo project.

Bootstrapping

I created an empty Java EE project via maven and added the needed Shiro dependencies as well as the Primefaces dependency to

the pom file.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>de.are_you_ready</groupId>
    <artifactId>shirotest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <failOnMissingWebXml>false</failOnMissingWebXml>

        <apache-shiro.version>1.3.2</apache-shiro.version>
        <primefaces.version>6.0</primefaces.version>
        <junit.version>4.12</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- Security -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>${apache-shiro.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>${apache-shiro.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <version>${apache-shiro.version}</version>
        </dependency>

        <!-- PrimeFaces -->
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>${primefaces.version}</version>
        </dependency>

        <!-- Testing -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- Logging -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>shirotest</finalName>
    </build>
</project>

Read More Read More

Apache Shiro part 1 – selecting a Java security framework

Apache Shiro part 1 – selecting a Java security framework

apache sharp logo
What is Shiro?
Apache Shiro is an open source Java security framework which makes authentication, authorization and cryptography very easy to use with a simple and small configuration. It is very portable because of its independence from the used application frameworks and covers all kinds of scenarios from console over desktop client to web applications.

Why Shiro?
I searched for a security solution (authorization and authentication) which I plan to reuse in multiple “pet projects” without having to think about the same problem over and over again. My actual project is a web project based on Java EE 7 and has at the moment a JSF/Primefaces frontend. I plan to extend the application with a REST interface and an alternative UI technology for personal testing/learning and research purposes. Maybe there will also be an iOS app later on which should use the then existent REST endpoint. With that in mind I need a flexible framework to support securing JAX-RS endpoints as well as my actual JSF UI.
I previously had some experience with the Java EE standard solution JAAS as well as the JBoss project Picketlink. Additional to that I’ve worked in projects using Spring Security (but had not much to do with it) which seems to be the industry standard nowadays but besides that I did a little research about possible alternatives I wasn’t aware of and came up with Apache Shiro and Keycloak.
This four/five tools and frameworks were the solutions I considered and researched which would be the best fit for me.

Read More Read More

Webapplikationen mit Vaadin

Webapplikationen mit Vaadin

Nach einiger Evaluierungszeit, für ein anstehendes Projekt, hat sich meine Firma für den Einsatz eines Webframeworks namens Vaadin entschieden. Da ich von dem Framework und der dahinter stehenden Company sehr begeistert bin möchte ich meine 2 Cents zur Verbreitung beitragen und einmal kurz umreißen worum es sich handelt.

Vaadin ist ein finnisches Framework das von der gleichnamigen Firma entwickelt wird. Es handelt sich um ein serverseitiges Java Framework das auf dem Google Web Toolkit (GWT) aufsetzt. Die Aufgabe des GWT Compilers ist es den Java UI Code in natives Javascript zu übersetzen und gleichzeitig Anpassungen für die verschiedenen Browser vorzunehmen. Der Vorteil hierbei ist das die Nutzer keine PlugIns brauchen und die entstehenden Applikationen sofort auf allen gängigen Browser lauffähig sind. Die Entwickler brauchen durch dieses Vorgehen selber kein Javascript mehr zu entwickeln, wodurch vor allem das Debuggen sehr erleichtert wird da man die üblichen Java Debugger nutzen kann.

Im Gegensatz zu GWT nutzt Vaadin einen serverseitigen Ansatz. Das bedeutet das sämtliche Applikationslogik sowie auch die Views und deren Events etc. auf dem Server laufen. Hierdurch erspart man sich ein eigenes Management der Client/Server Kommunikation die aber natürlich mit etwas mehr Serverlast erkauft wird. Bei Vaadin selbst spricht man von 10.000 möglichen Concurrent Usern pro „modernem“ Server. Für eine Webapplikation die in einem eingegrenzten Nutzerkreis einen Desktop Applikation ersetzen soll dürfte das mehr als genug sein, für ein neues Twitter aber sollte man sich wohl eher nach etwas anderem umsehen (wobei ein relativ leichtes Clustering mehrerer Server möglich sein soll).

Vorteile die für Vaadin sprechen sind dass das komplette Java Ökosystem samt IDEs, Tools, Libraries und allem drum und dran genutzt werden kann. Selbst der Einsatz anderer JVM Sprachen wie Scala oder Groovy ist möglich. Da alles standardmäßig in Java entwickelt wird ist auch die Lernkurve für Java Entwickler nicht sehr steil und die Entwicklung kann relativ schnell starten. Im Gegensatz zu vielen anderen Java Frameworks nutzt Vaadin keine XML Konfigurationsfiles, was das Arbeiten ebenfalls sehr angenehm gestaltet. Nicht zuletzt ist Vaadin sehr gut dokumentiert. Es existiert ein eigens geschriebenes Buch das kostenlos herunterladbar oder auch als Druckversion zu haben ist (wird auch gern auf Konferenzen kostenlos verteilt). Sollten trotzdem noch Fragen offen bleiben steht ein Forum zur Verfügung an dem sich viele Mitarbeiter von Vaadin beteiligen. Reicht das immer noch nicht aus gibt es noch die Möglichkeit via Twitter, IRC oder Mail direkt Kontakt aufzunehmen der (meiner Erfahrung nach) auch immer recht schnell beantwortet wird, oder man besucht einfach eine der vielen Veranstaltungen wo Vaadin Talks abhält oder mit einer Booth zu gegen ist.

Wer sich für Vaadin interessiert kann sich einen ca. 45 minütigen Einstiegstalk von Joonas Lehtinen (CEO bei Vaadin) in englisch ansehen.

Mehr zum Thema Vaadin folgt sicher demnächst hier