Since version 2.3, Grails supports asynchronous parallel programming to support modern multiple core hardware. Therefore a new Grails command is added to generate asynchronous controllers for domain classes. The generated controller contains CRUD actions for a given domain class. In the example below, we will generate a default asynchronous implementation of a Grails controller. First we create a domain object:
$ grails create-domain-class grails.data.Movie
Continue reading →
Gradle uses the name build.gradle
as the default name for a build file. If we write our build code in a file build.gradle
then we don't have to specify the build filename when we run tasks. We can create build files with a different name other than build.gradle
. For example we can define our build logic in a file sample.gradle
. To run the tasks from this build file we can use the command line option -b
or --build-file
followed by the file name. But we can also change the project settings and set a new default build file name for our project. With the changed project settings we do not have to use the command line options -b
or --build-file
.
Suppose we have the following build file with the name sample.gradle
:
Continue reading →
Since version 2.3 Grails has excellent support for creating REST APIs. This new support comes with some new console commands. Besides the well known generate-controller
command, Grails now comes with a new command which let you generate restful controllers for a given domain class. In the following example, we will create a restful controller using the new generate-restful-controller command.
First we create a domain object
$ grails create-domain-class grails.data.Movie
Continue reading →
When we write Groovy code there is a big chance we also write some closures. If we are working with collections for example and use the each
, collect
or find
methods we use closures as arguments for these methods. We can assign closures to variables and use the variable name to reference to closure. But we can also create a subclass of the Closure
class to implement a closure. Then we use an instance of the new closure class wherever a closure can be used.
To write a closure as a class we must subclass Closure
and implement a method with the name doCall
. The method can accept arbitrary arguments and the return type can be defined by us. So we are not overriding a method doCall
from the superclass Closure
. But Groovy will look for a method with the name doCall
to execute the closure logic and internally use methods from the Closure
superclass.
Continue reading →
If we write a specification for a specific class we can indicate that class with the @Subject
annotation. This annotation is only for informational purposes, but can help in making sure we understand which class we are writing the specifications for. The annotation can either be used at class level or field level. If we use the annotation at class level we must specify the class or classes under test as argument for the annotation. If we apply the annotation to a field, the type of the field is used as the class under test. The field can be part of the class definition, but we can also apply the @Subject
annotation to fields inside a feature method.
In the following example Spock specification we write a specification for the class Greet
. The definition of the Greet
class is also in the code listing. We use the @Subject
annotation on the field greet
to indicate this instance of the Greet
class is the class we are testing here. The code also works with the @Subject
annotation, but it adds more clarity to the specification.
Continue reading →
This second part of the Stateless Spring Security series is about exploring means of authentication in a stateless way. If you missed the first part about CSRF you can find it here. So when talking about Authentication, its all about having the client identify itself to the server in a verifiable manner. Typically this start with the server providing the client with a challenge, like a request to fill in a username / password. Today I want to focus on what happens after passing such initial (manual) challenge and how to deal with automatic re-authentication of futher HTTP requests.
The most common approach we probably all know is to use a server generated secret token (Session key) in the form of a JSESSIONID cookie. Initial setup for this is near nothing these days perhaps making you forget you have a choice to make here in the first place. Even without further using this "Session key" to store any other state "in the session", the key itself is in fact state as well. I.e. without a shared and persistent storage of these keys, no successful authentication will survive a server reboot or requests being load balanced to another server.
Continue reading →
Today with a RESTful architecture becoming more and more standard it might be worthwhile to spend some time rethinking your current security approaches. Within this small series of blog posts we'll explore a few relatively new ways of solving web related security issues in a Stateless way. This first entry is about protecting your website against Cross-Site Request Forgery (CSRF).
CSRF attacks are based on lingering authentication cookies. After being logged in or otherwise identified as a unique visitor on a site, that site is likely to leave a cookie within the browser. Without explicitly logging out or otherwise removing this cookie, it is likely to remain valid for some time. Another site can abuse this by having the browser make (Cross-Site) requests to the site under attack. For example including some Javascript to make a POST to "http://siteunderattack.com/changepassword?pw=hacked" will have the browser make that request, attaching any (authentication) cookies still active for that domain to the request! Even though the Single-Origin Policy (SOP) does not allow the malicious site read access to any part of the response. As probably clear from the example above, the harm is already be done if the requested URL triggers any side-effects (state changes) in the background.
Continue reading →
In a previous post we learned how to run a Java application in a Gradle project. The Java source file with a main
method is part of the project and we use the JavaExec
task to run the Java code. We can use the same JavaExec
task to run a Groovy script file.
A Groovy script file doesn't have an explicit main
method, but it is added when we compile the script file. The name of the script file is also the name of the generated class, so we use that name for the main
property of the JavaExec
task. Let's first create simple Groovy script file to display the current date. We can pass an extra argument with the date format we wan't to use.
Continue reading →
My colleague, Tom Wetjens, wrote a blog post Package-only dependencies in Maven. He showed a Maven solution when we want to include dependencies in the WAR file, which are not used in any other scopes. In this blog post we will see how we solve this in Gradle.
Suppose we use the SLF4J Logging API in our project. We use the API as a compile dependency, because our code uses this API. But in our test runtime we want to use the SLF4J Simple implementation of this API. And in our WAR file we want to include the Logback implementation of the API. The Logback dependency is only needed to be included in the WAR file and shouldn't exist in any other dependency configuration.
Continue reading →
Sometimes you have a Maven project that needs dependencies for running tests that you do not want ending up in the final packaged WAR. We all know the test directive in the POM that accomplishes this. You might also have dependencies that are only required at runtime and need to be in the WAR but not on the compile classpath. Normally you would use the runtime directive in the POM. Consider a situation where we have a dependency that we want to be available at runtime (in the WAR), but not on the classpath during the execution of our tests. A nice example of this is logging implementations: we want to use the slf4j-simple implementation for running unit tests, but we want logback-classic to be packaged in the WAR. To accomplish this, you can use the maven-dependency-plugin as illustrated in the following POM snippet:
org.slf4j
slf4j-api
1.7.7
junit
junit
4.11
test
org.slf4j
slf4j-simple
1.7.7
test
org.apache.maven.plugins
maven-dependency-plugin
package-only-deps
prepare-package
copy
ch.qos.logback
logback-classic
1.1.2
${project.build.directory}/${project.build.finalName}/WEB-INF/lib
Continue reading →
Just a small reminder. Javascript allows you to call methods based on their name. So if a DOM element has a addClass and removeClass which both take the same argument we could write:
var someClass = 'some-class';
var hasClass = element.hasClass(someClass);
if(hasClass){
element.addClass(someClass);
} else {
element.removeClass(someClass);
}
Continue reading →
In a previous blog post we learned about the conditional directives in Asciidoctor. Dan Allen mentioned a conditional directive that we can use to see if the document is used on GitHub. The conditional directive is called env-github
.
We have the following Asciidoc markup for a document stored on GitHub:
Continue reading →