17+ years experience in software development. Worked extenseively on Java, JEE, Spring, open source, SOA, Webservices and such java related technologies. Currently working as Technical Architect at Mastek Ltd., India Ganesh has posted 4 posts at DZone. You can read more from them at their website. View Full User Profile

Tip: Quick web app security for Spring MVC based POC

11.17.2011
| 1459 views |
  • submit to reddit

While developing POCs, often quite late we realize we have not paid attention to basic web app security features like

  • a login page or basic http auth
  • some way to specifiy mutiple users, each user having mutiple roles
  • role based access for some screens / URls in the web app
  • logout url
  • automatic redirection of non-authenticated user access to the login page 

Some of these features though quite trivial are required in the most bare of POCs, and spending development effort on this is many times not high priority

Hence the need to quicky provide about web app security features without writing a single line of code only through some basic spring security configuration.

Details as below:

1. Download spring security and put the jars in the build and runtime classpath

2. in web.xml add the following filter and filter-mapping entry

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
   
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3. in web.xml, in the base spring application context, load a spring config file like security-beans.xml with following contents

     <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/existing-spring-contexts.xml,WEB-INF/security-beans.xml</param-value>
    </context-param>

 

contents of security-beans.xml

    <http auto-config="true" use-expressions="true">
        <intercept-url pattern="/mvc/admin/**" access="hasRole('ROLE_ADMIN')" />
        <intercept-url pattern="/mvc/general/**" access="hasRole('ROLE_SPITTER')" />
        <intercept-url pattern="/**" access="isFullyAuthenticated()" />
    </http>

    <user-service id="userService">
        <user name="all" password="all" authorities="ROLE_REGULAR_USER,ROLE_ADMIN" />
        <user name="gan" password="gan" authorities="ROLE_REGULAR_USER" />
        <user name="admin" password="admin" authorities="ROLE_ADMIN" />
    </user-service>


    <authentication-manager>
        <authentication-provider user-service-ref="userService" />
    </authentication-manager>

 

Explanation

Here the auto-config=true gives us a ready-made(stock) login page, which can be overriden with our own custom login page

login url: http://localhost:8081/MyWebAppContext/j_spring_security_login

logout url: http://localhost:8081/MyWebAppContext/j_spring_security_logout

userService bean allows us to specify sample userids, and their roles, accessible throughout our application through standard j2ee apis and also spring security tags on jsps

<security:authentication property="principal.username" />

<security:authorize access="hasRole('ROLE_ADMIN')">
<h2>Admin Area keep Off!</h2>
</security:authorize>

 

Through entry like <intercept-url pattern="/mvc/admin/**" access="hasRole('ROLE_ADMIN')" />

we can very welll control access to certain URLs in the web application for specific users and roles

 

Summary

Thus without writing a single line of code using spring security config we can impart quick web security to our POCs

Please refer spring security documentation for further details

 http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html

 

 

 

0
Published at DZone with permission of its author, Ganesh Ghag.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)