SlideShare a Scribd company logo
1 of 66
Download to read offline
Hacking the Grails Spring
Security 2.0 Plugin
Burt Beckwith
Be sure to view last year's 
“What's New” talk
Video
Slides
Additionally, the earlier version 
of this talk from GGX 2011 is 
available; see this blog post for 
details and links
4CONFIDENTIAL 4CONFIDENTIAL 4
web.xml
web.xml
● Spring Security is implemented as a filter chain, so the
<filter-mapping> elements are the important ones:
● charEncodingFilter
● hiddenHttpMethod
● AssetPipelineFilter
● grailsWebRequest
● springSecurityFilterChain
● urlMapping
● grailsCacheFilter
web.xml
● Spring Security is implemented as a filter chain, so the
<filter-mapping> elements are the important ones:
● charEncodingFilter
● hiddenHttpMethod
● AssetPipelineFilter
● grailsWebRequest
● springSecurityFilterChain
● urlMapping
● grailsCacheFilter
web.xml - charEncodingFilter
Prevents this
●
org.springframework.web.filter.DelegatingFilterProxy
● Uses the "characterEncodingFilter" bean
(org.springframework.web.filter.CharacterEncodingFilter)
defined in WEB-INF/applicationContext.xml (the
“parent” context)
● request.setCharacterEncoding("utf-8");
● response.setCharacterEncoding("utf-8");
web.xml - hiddenHttpMethod
String httpMethod = getHttpMethodOverride(request);
filterChain.doFilter(
new HttpMethodRequestWrapper(httpMethod, request),
response);
●
org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter
● <g:form controller="book" method="DELETE">
● See the section on REST in the Grails reference docs
web.xml - AssetPipelineFilter
● asset.pipeline.grails.AssetPipelineFilter
● Manages minification, etc. for the asset-pipeline plugin(s)
web.xml - grailsWebRequest
●
org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter
LocaleContextHolder.setLocale(request.getLocale());
GrailsWebRequest webRequest = new GrailsWebRequest(
request, response, getServletContext());
configureParameterCreationListeners(webRequest);
try {
WebUtils.storeGrailsWebRequest(webRequest);
// Set the flash scope instance to its next state
FlashScope fs = webRequest.getAttributes().getFlashScope(request);
fs.next();
filterChain.doFilter(request, response);
}
finally {
webRequest.requestCompleted();
WebUtils.clearGrailsWebRequest();
LocaleContextHolder.setLocale(null);
}
web.xml - springSecurityFilterChain
●
org.springframework.web.filter.DelegatingFilterProxy
● Uses the "springSecurityFilterChain" bean defined by
the plugin
(org.springframework.security.web.FilterChainProxy)
web.xml - springSecurityFilterChain
● Typical filter beans:
●
securityContextPersistenceFilter
● logoutFilter
● authenticationProcessingFilter
● securityContextHolderAwareRequestFilter
●
rememberMeAuthenticationFilter
● anonymousAuthenticationFilter
● exceptionTranslationFilter
●
filterInvocationInterceptor
web.xml - urlMapping
●
org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter
● Matches requested url to the correct
controller/action/view/error code
● Based on mappings in grails-app/conf/UrlMappings.groovy
web.xml - grailsCacheFilter
●
org.springframework.web.filter.DelegatingFilterProxy
● Uses the "grailsCacheFilter" bean
(MemoryPageFragmentCachingFilter /
EhcachePageFragmentCachingFilter / etc.)
● Entry point for controller and GSP fragment caching in the
cache plugins
springSecurityFilterChain
springSecurityFilterChain - securityContextPersistenceFilter
●
org.springframework.security.web.context.SecurityContextPersistenceFilter
● Retrieves the SecurityContext from the HTTP session
(under the “SPRING_SECURITY_CONTEXT” key) or creates
a new empty one
●
Stores the context in the holder:
SecurityContextHolder.setContext()
● Removes the context at the end of the request
springSecurityFilterChain - logoutFilter
●
grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
● If uri is "/j_spring_security_logout" calls
handler.logout(request, response, auth) for each
o.s.s.web.authentication.logout.LogoutHandler and
redirects to post-logout url (by default "/")
springSecurityFilterChain - authenticationProcessingFilter
●
grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter
(extends o.s.s.web.authentication.UsernamePasswordAuthenticationFilter)
● Sets the request and response in the SecurityRequestHolder
ThreadLocal fields (custom plugin functionality)
● If uri is “/j_spring_security_check” calls
attemptAuthentication()
● The request and response holder functionality will be in its own filter for the
2.0 GA release
springSecurityFilterChain - anonymousAuthenticationFilter
●
grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
● If not logged in creates a
grails.plugin.springsecurity.authentication.GrailsAnonymousAuthenticationToken
and registers it as the Authentication
in the SecurityContext
● This is a plugin-specific implementation
that always creates an Authentication
with a Principal that implements
UserDetails (not a f!@#*u$ng String)
springSecurityFilterChain - filterInvocationInterceptor
●
o.s.s.web.access.intercept.FilterSecurityInterceptor
● Determines the o.s.s.access.SecurityConfig
collection for the request from the o.s.s.web.access.intercept.
FilterInvocationSecurityMetadataSource
(AnnotationFilterInvocationDefinition,
InterceptUrlMapFilterInvocationDefinition, or
RequestmapFilterInvocationDefinition)
springSecurityFilterChain - filterInvocationInterceptor
● Delegates to an AccessDecisionManager
(grails.plugin.springsecurity.access.vote.
AuthenticatedVetoableDecisionManager) to call
each registered
o.s.s.access.AccessDecisionVoter
springSecurityFilterChain - filterInvocationInterceptor
● o.s.s.access.vote.AuthenticatedVoter works
with "IS_AUTHENTICATED_FULLY",
"IS_AUTHENTICATED_REMEMBERED", and
"IS_AUTHENTICATED_ANONYMOUSLY"
springSecurityFilterChain - filterInvocationInterceptor
● o.s.s.access.vote.RoleHierarchyVoter finds
the GrantedAuthority instances from the
Authentication, checks for matches with required
roles
springSecurityFilterChain - filterInvocationInterceptor
● grails.plugin.springsecurity.web.access.expression.
WebExpressionVoter looks for a
WebExpressionConfigAttribute and evaluates its
expression if found
● grails.plugin.springsecurity.access.vote.
ClosureVoter looks for a Closure and invokes it to
determine how to vote
springSecurityFilterChain - filterInvocationInterceptor
● This is caught by the exceptionTranslationFilter
● If the Authentication is anonymous, stores a
SavedRequest in the HTTP session and calls
authenticationEntryPoint.commence(request,
response, reason)
● The authenticationEntryPoint is a
grails.plugin.springsecurity.web.authentication.
AjaxAwareAuthenticationEntryPoint
● This issues a redirect to the login page, by default
/login/auth
if (denyCount > 0) {
throw new AccessDeniedException("Access is denied");
}
Customizing the Plugin
Customizing the Plugin
● Simple; not always clear how to customize; many
options aren't exposed
● In contrast, the plugin explicitly defines every bean and
exposes nearly all properties
● See SpringSecurityCoreGrailsPlugin.groovy
for the details
Overriding Beans
Overriding Beans
accessDecisionManager
accessDeniedHandler
anonymousAuthenticationFilter
anonymousAuthenticationProvider
authenticatedVoter
authenticationDetailsSource
authenticationEntryPoint
authenticationEventPublisher
authenticationFailureHandler
authenticationManager
authenticationProcessingFilter
authenticationSuccessHandler
authenticationTrustResolver
authenticationUserDetailsService
daoAuthenticationProvider
exceptionTranslationFilter
filterInvocationInterceptor
logoutFilter
logoutHandlers
logoutSuccessHandler
objectDefinitionSource
passwordEncoder
portMapper
portResolver
postAuthenticationChecks
preAuthenticationChecks
redirectStrategy
rememberMeAuthenticationFilter
rememberMeAuthenticationProvider
rememberMeServices
requestCache
roleHierarchy
roleVoter
runAsManager
saltSource
securityContextHolderAwareRequestFilter
securityContextLogoutHandler
securityContextPersistenceFilter
securityEventListener
sessionAuthenticationStrategy
springSecurityFilterChain
tokenRepository
userCache
userDetailsService
webExpressionHandler
webExpressionVoter
webInvocationPrivilegeEvaluator
Overriding Beans
● Building the Spring ApplicationContext
Core pluginsCore plugins Installed pluginsInstalled plugins resources.groovyresources.groovy
Overriding Beans
● Gross oversimplifications:
● The ApplicationContext is like a Map; the keys are
bean names and the values are bean instances
● Defining a bean with the same name as an earlier bean
replaces the previous, just like Map.put(key,
value) does
Overriding Beans
● Gross oversimplifications:
● The ApplicationContext is like a Map; the keys are
bean names and the values are bean instances
● Defining a bean with the same name as an earlier bean
replaces the previous, just like Map.put(key,
value) does
Overriding Beans
● To change how a bean works:
● Subclass the current class
● Or subclass a similar class that's closer to what you need
●
Or implement the interface directly
● Then register yours in grails-app/
conf/spring/resources.groovy
Overriding Beans
import com.foo.bar.MySaltSource
import com.foo.bar.MyUserDetailsService
import com.foo.bar.MyPasswordEncoder
beans = {
saltSource(MySaltSource) {
// bean properties
}
userDetailsService(MyUserDetailsService) {
// bean properties
}
passwordEncoder(MyPasswordEncoder) {
// bean properties
}
}
Customizing Bean Properties
Customizing Bean Properties
● In addition to declaring every bean, nearly all properties
are configured from default values in the plugin's
grails-
app/conf/DefaultSecurityConfig.groovy
● DO NOT EDIT DefaultSecurityConfig.groovy
Customizing Bean Properties
● All properties can be overridden in your app's
Config.groovy
● Be sure to add the grails.plugin.springsecurity
prefix
●
Don't replace a bean if all you need to change is one or
more properties
Customizing Bean Properties
active
adh.ajaxErrorPage
adh.errorPage
ajaxHeader
anon.key
anon.userAttribute
apf.allowSessionCreation
apf.continueChainBeforeSuccessfulAuthentication
apf.filterProcessesUrl
apf.passwordParameter
apf.postOnly
apf.usernameParameter
atr.anonymousClass
atr.rememberMeClass
auth.ajaxLoginFormUrl
auth.forceHttps
auth.loginFormUrl
auth.useForward
authenticationDetails.authClass
authority.className
authority.nameField
basic.realmName
cacheUsers
controllerAnnotations.lowercase
controllerAnnotations.matcher
controllerAnnotations.staticRules
dao.hideUserNotFoundExceptions
dao.reflectionSaltSourceProperty
digest.createAuthenticatedToken
digest.key
digest.nonceValiditySeconds
digest.passwordAlreadyEncoded
digest.realmName
digest.useCleartextPasswords
failureHandler.ajaxAuthFailUrl
failureHandler.defaultFailureUrl
failureHandler.exceptionMappings
failureHandler.useForward
filterChain.stripQueryStringFromUrls
interceptUrlMap
ipRestrictions
logout.afterLogoutUrl
logout.filterProcessesUrl
logout.handlerNames
password.algorithm
password.bcrypt.logrounds
password.encodeHashAsBase64
portMapper.httpPort
portMapper.httpsPort
providerManager.eraseCredentialsAfterAuthentication
providerNames
redirectStrategy.contextRelative
registerLoggerListener
rejectIfNoRule
rememberMe.alwaysRemember
rememberMe.cookieName
rememberMe.key
rememberMe.parameter
rememberMe.persistent
rememberMe.persistentToken.domainClassName
rememberMe.persistentToken.seriesLength
rememberMe.persistentToken.tokenLength
rememberMe.tokenValiditySeconds
rememberMe.useSecureCookie
requestCache.createSession
requestCache.onlyOnGet
requestMap.className
requestMap.configAttributeField
requestMap.urlField
roleHierarchy
secureChannel.definition
securityConfigType
sessionFixationPrevention.alwaysCreateSession
sessionFixationPrevention.migrate
successHandler.ajaxSuccessUrl
successHandler.alwaysUseDefault
successHandler.defaultTargetUrl
successHandler.targetUrlParameter
successHandler.useReferer
switchUser.exitUserUrl
switchUser.switchFailureUrl
switchUser.switchUserUrl
switchUser.targetUrl
useBasicAuth
useDigestAuth
useHttpSessionEventPublisher
userLookup.accountExpiredPropertyName
userLookup.accountLockedPropertyName
userLookup.authoritiesPropertyName
userLookup.authorityJoinClassName
userLookup.enabledPropertyName
userLookup.passwordExpiredPropertyName
userLookup.passwordPropertyName
userLookup.userDomainClassName
userLookup.usernamePropertyName
useSecurityEventListener
useSessionFixationPrevention
useSwitchUserFilter
useX509
voterNames
x509.checkForPrincipalChanges
x509.continueFilterChainOnUnsuccessfulAuthentication
x509.invalidateSessionOnPrincipalChange
x509.subjectDnRegex
x509.throwExceptionWhenTokenRejected
Customizing Bean Properties
grails-app/conf/Config.groovy:
grails.plugin.springsecurity.userLookup.userDomainClassName = '…'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = '…'
grails.plugin.springsecurity.authority.className = '…'
grails.plugin.springsecurity.auth.loginFormUrl = '/log-in'
grails.plugin.springsecurity.apf.filterProcessesUrl = '/authenticate'
grails.plugin.springsecurity.logout.afterLogoutUrl = '/home'
grails.plugin.springsecurity.userLookup.usernamePropertyName = 'email'
Customizing Bean Properties
class BootStrap {
def authenticationProcessingFilter
def myAuthenticationFailureHandler
def init = {
authenticationProcessingFilter.authenticationFailureHandler =
myAuthenticationFailureHandler
}
}
● Can also configure beans in BootStrap.groovy, e.g. to
avoid redefining a whole bean in resources.groovy just
to change one dependency:
Custom UserDetailsService
Custom UserDetailsService
● Very common customization
●
Documented in the plugin docs in section
“Custom UserDetailsService”
Custom UserDetailsService
● General workflow:
● Create a custom
o.s.s.core.userdetails.UserDetailsService
(grails.plugin.springsecurity.userdetails.
GrailsUserDetailsService) implementation
● Directly implement the interface (best)
● or extend grails.plugin.springsecurity.userdetails.
GormUserDetailsService (ok, but usually cleaner to implement
the interface)
Custom UserDetailsService
● General workflow (cont.):
● Create a custom implementation of
o.s.s.core.userdetails.UserDetails
● Extend
grails.plugin.springsecurity.userdetails.GrailsUser
● or extend o.s.s.core.userdetails.User
● or directly implement the interface
Custom UserDetailsService
● General workflow (cont.):
● Register the bean override in grails-
app/conf/spring/resources.groovy:
import com.mycompany.myapp.MyUserDetailsService
beans = {
userDetailsService(MyUserDetailsService)
}
Custom AuthenticationProvider
Custom AuthenticationProvider
● General workflow:
● Create a custom
o.s.s.authentication.AuthenticationProvider
implementation
● Extend one that's similar, e.g.
o.s.s.authentication.dao.DaoAuthenticationProvider
● or directly implement the interface
Custom AuthenticationProvider
● General workflow (cont.):
● You'll probably want a custom
org.springframework.security.core.Authentication
● Extend an existing implementation, e.g.
o.s.s.authentication.UsernamePasswordAuthenticationToken
● or directly implement the interface
Custom AuthenticationProvider
● General workflow (cont.):
● If you're using a custom Authentication, you'll need a filter to
create it
● Create a custom javax.servlet.Filter implementation
● Best to extend org.springframework.web.filter.GenericFilterBean
● or one that's similar, e.g.
o.s.s.web.authentication.UsernamePasswordAuthenticationFilter
● Or directly implement the interface
Custom AuthenticationProvider
● Registering the custom classes
● If you're replacing functionality, register bean overrides in
resources.groovy
● If you're adding an alternate authentication option (e.g. for only some
URLs)
● Register the beans in resources.groovy
● Register the provider as described in docs section “Authentication Providers”
●
Register the filter in its position as described in docs section “Filters”
Custom Post-logout Behavior
Custom Post-logout Behavior
● Recall that logout is processed by MutableLogoutFilter
after request for /j_spring_security_logout
● handler.logout(request, response, auth) is
called for each LogoutHandler
● then redirect to post-logout url (by default “/”)
Custom Post-logout Behavior
● The default LogoutHandler implementations are
●
o.s.s.web.authentication.rememberme.TokenBasedRememberMeServices
● Deletes the remember-me cookie
●
o.s.s.web.authentication.logout.SecurityContextLogoutHandler
● Invalidates the HttpSession
● Removes the SecurityContext from the
SecurityContextHolder
Custom Post-logout Behavior
● Redirect is triggered by
● logoutSuccessHandler.onLogoutSuccess(request,
response, auth)
● LogoutSuccessHandler is an instance of
o.s.s.web.authentication.logout.SimpleUrlLogoutSuccessHandler
Custom Post-logout Behavior
● To add logic to dynamically determine redirect url:
● Subclass SimpleUrlLogoutSuccessHandler
● Since the Authentication isn't available in
determineTargetUrl, override onLogoutSuccess and set it
in a ThreadLocal
Custom Post-logout Behavior
● To add logic to dynamically determine redirect url (cont):
private static final ThreadLocal<Authentication> AUTH_HOLDER =
new ThreadLocal<Authentication>()
…
void onLogoutSuccess(...) throws ... {
AUTH_HOLDER.set authentication
try {
super.handle(request, response, authentication)
}
finally {
AUTH_HOLDER.remove()
}
}
Custom Post-logout Behavior
● To add logic to dynamically determine redirect url (cont):
● Override determineTargetUrl
protected String determineTargetUrl(...) {
Authentication auth = AUTH_HOLDER.get()
String url = super.determineTargetUrl(request, response)
if (auth instanceof OrganizationAuthentication) {
OrganizationAuthentication authentication = auth
url = ...
}
url
}
Custom Post-logout Behavior
● To add logic to dynamically determine redirect url (cont):
● Redefine the logoutSuccessHandler bean in resources.groovy
import com.mycompany.myapp.CustomLogoutSuccessHandler
import grails.plugin.springsecurity.SpringSecurityUtils
beans = {
def conf = SpringSecurityUtils.securityConfig
logoutSuccessHandler(CustomLogoutSuccessHandler) {
redirectStrategy = ref('redirectStrategy')
defaultTargetUrl = conf.logout.afterLogoutUrl
alwaysUseDefaultTargetUrl = conf.logout.alwaysUseDefaultTargetUrl
targetUrlParameter = conf.logout.targetUrlParameter
useReferer = conf.logout.redirectToReferer
}
}
Customization Overview
Customization Overview
● Subclass or replace filters in the chain:
● SecurityContextPersistenceFilter
● MutableLogoutFilter
● RequestHolderAuthenticationFilter
(UsernamePasswordAuthenticationFilter)
● SecurityContextHolderAwareRequestFilter
● RememberMeAuthenticationFilter
● AnonymousAuthenticationFilter
● ExceptionTranslationFilter
● FilterSecurityInterceptor
Customization Overview
● Remove filter(s) from the chain
● Not recommended
● Add filter(s) to the chain
● Add/remove/replace LogoutHandler(s)
● Add/remove/replace AccessDecisionVoter(s)
● Add/remove/replace AuthenticationProvider(s)
Customization Overview
● Customize a filter or AuthenticationProvider's dependency
● e.g. custom UserDetailsService
● Don't write code if you can customize properties or
BootStrap.groovy
● Read the Spring Security documentation
● Print the PDF and read it on your commute
● Ask for help on the Grails User mailing list
¡Gracias!
http://cuteoverload.files.wordpress.com/2014/03/cute-smiling-animals-251.jpg

More Related Content

What's hot

Keycloak Single Sign-On
Keycloak Single Sign-OnKeycloak Single Sign-On
Keycloak Single Sign-OnRavi Yasas
 
Enterprise Security mit Spring Security
Enterprise Security mit Spring SecurityEnterprise Security mit Spring Security
Enterprise Security mit Spring SecurityMike Wiesner
 
ApacheCon 2014: Infinite Session Clustering with Apache Shiro & Cassandra
ApacheCon 2014: Infinite Session Clustering with Apache Shiro & CassandraApacheCon 2014: Infinite Session Clustering with Apache Shiro & Cassandra
ApacheCon 2014: Infinite Session Clustering with Apache Shiro & CassandraDataStax Academy
 
W3 conf hill-html5-security-realities
W3 conf hill-html5-security-realitiesW3 conf hill-html5-security-realities
W3 conf hill-html5-security-realitiesBrad Hill
 
Getting Started with Spring Authorization Server
Getting Started with Spring Authorization ServerGetting Started with Spring Authorization Server
Getting Started with Spring Authorization ServerVMware Tanzu
 
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry BuzdinModern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry BuzdinJava User Group Latvia
 
10 Excellent Ways to Secure Your Spring Boot Application - The Secure Develop...
10 Excellent Ways to Secure Your Spring Boot Application - The Secure Develop...10 Excellent Ways to Secure Your Spring Boot Application - The Secure Develop...
10 Excellent Ways to Secure Your Spring Boot Application - The Secure Develop...Matt Raible
 
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...Ioan Eugen Stan
 
Understanding Windows Access Token Manipulation
Understanding Windows Access Token ManipulationUnderstanding Windows Access Token Manipulation
Understanding Windows Access Token ManipulationJustin Bui
 
Testing Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam editionTesting Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam editionJose Manuel Ortega Candel
 
[OPD 2019] Trusted types and the end of DOM XSS
[OPD 2019] Trusted types and the end of DOM XSS[OPD 2019] Trusted types and the end of DOM XSS
[OPD 2019] Trusted types and the end of DOM XSSOWASP
 
[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokensOWASP
 
In The Middle of Printers - The (In)Security of Pull Printing solutions - Hac...
In The Middle of Printers - The (In)Security of Pull Printing solutions - Hac...In The Middle of Printers - The (In)Security of Pull Printing solutions - Hac...
In The Middle of Printers - The (In)Security of Pull Printing solutions - Hac...Jakub Kałużny
 
Intrigue Core: Scaling Assessment Automation
Intrigue Core: Scaling Assessment AutomationIntrigue Core: Scaling Assessment Automation
Intrigue Core: Scaling Assessment AutomationJonathan Cran
 
What the Heck is OAuth and OpenID Connect? Connect.Tech 2017
What the Heck is OAuth and OpenID Connect? Connect.Tech 2017What the Heck is OAuth and OpenID Connect? Connect.Tech 2017
What the Heck is OAuth and OpenID Connect? Connect.Tech 2017Matt Raible
 
Building an API Security Ecosystem
Building an API Security EcosystemBuilding an API Security Ecosystem
Building an API Security EcosystemPrabath Siriwardena
 
API Security : Patterns and Practices
API Security : Patterns and PracticesAPI Security : Patterns and Practices
API Security : Patterns and PracticesPrabath Siriwardena
 
JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2Rodrigo Cândido da Silva
 
What the Heck is OAuth and OpenID Connect - DOSUG 2018
What the Heck is OAuth and OpenID Connect - DOSUG 2018What the Heck is OAuth and OpenID Connect - DOSUG 2018
What the Heck is OAuth and OpenID Connect - DOSUG 2018Matt Raible
 
Spring4 security
Spring4 securitySpring4 security
Spring4 securitySang Shin
 

What's hot (20)

Keycloak Single Sign-On
Keycloak Single Sign-OnKeycloak Single Sign-On
Keycloak Single Sign-On
 
Enterprise Security mit Spring Security
Enterprise Security mit Spring SecurityEnterprise Security mit Spring Security
Enterprise Security mit Spring Security
 
ApacheCon 2014: Infinite Session Clustering with Apache Shiro & Cassandra
ApacheCon 2014: Infinite Session Clustering with Apache Shiro & CassandraApacheCon 2014: Infinite Session Clustering with Apache Shiro & Cassandra
ApacheCon 2014: Infinite Session Clustering with Apache Shiro & Cassandra
 
W3 conf hill-html5-security-realities
W3 conf hill-html5-security-realitiesW3 conf hill-html5-security-realities
W3 conf hill-html5-security-realities
 
Getting Started with Spring Authorization Server
Getting Started with Spring Authorization ServerGetting Started with Spring Authorization Server
Getting Started with Spring Authorization Server
 
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry BuzdinModern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
 
10 Excellent Ways to Secure Your Spring Boot Application - The Secure Develop...
10 Excellent Ways to Secure Your Spring Boot Application - The Secure Develop...10 Excellent Ways to Secure Your Spring Boot Application - The Secure Develop...
10 Excellent Ways to Secure Your Spring Boot Application - The Secure Develop...
 
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
 
Understanding Windows Access Token Manipulation
Understanding Windows Access Token ManipulationUnderstanding Windows Access Token Manipulation
Understanding Windows Access Token Manipulation
 
Testing Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam editionTesting Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam edition
 
[OPD 2019] Trusted types and the end of DOM XSS
[OPD 2019] Trusted types and the end of DOM XSS[OPD 2019] Trusted types and the end of DOM XSS
[OPD 2019] Trusted types and the end of DOM XSS
 
[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens
 
In The Middle of Printers - The (In)Security of Pull Printing solutions - Hac...
In The Middle of Printers - The (In)Security of Pull Printing solutions - Hac...In The Middle of Printers - The (In)Security of Pull Printing solutions - Hac...
In The Middle of Printers - The (In)Security of Pull Printing solutions - Hac...
 
Intrigue Core: Scaling Assessment Automation
Intrigue Core: Scaling Assessment AutomationIntrigue Core: Scaling Assessment Automation
Intrigue Core: Scaling Assessment Automation
 
What the Heck is OAuth and OpenID Connect? Connect.Tech 2017
What the Heck is OAuth and OpenID Connect? Connect.Tech 2017What the Heck is OAuth and OpenID Connect? Connect.Tech 2017
What the Heck is OAuth and OpenID Connect? Connect.Tech 2017
 
Building an API Security Ecosystem
Building an API Security EcosystemBuilding an API Security Ecosystem
Building an API Security Ecosystem
 
API Security : Patterns and Practices
API Security : Patterns and PracticesAPI Security : Patterns and Practices
API Security : Patterns and Practices
 
JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2
 
What the Heck is OAuth and OpenID Connect - DOSUG 2018
What the Heck is OAuth and OpenID Connect - DOSUG 2018What the Heck is OAuth and OpenID Connect - DOSUG 2018
What the Heck is OAuth and OpenID Connect - DOSUG 2018
 
Spring4 security
Spring4 securitySpring4 security
Spring4 security
 

Viewers also liked

Advanced GORM - Performance, Customization and Monitoring
Advanced GORM - Performance, Customization and MonitoringAdvanced GORM - Performance, Customization and Monitoring
Advanced GORM - Performance, Customization and MonitoringBurt Beckwith
 
Little Did He Know ...
Little Did He Know ...Little Did He Know ...
Little Did He Know ...Burt Beckwith
 
Grails Worst Practices
Grails Worst PracticesGrails Worst Practices
Grails Worst PracticesBurt Beckwith
 
When the saints go marching in recorder
When the saints go marching in recorderWhen the saints go marching in recorder
When the saints go marching in recorderChris Kozak
 
Geb+spock: let your functional tests live long and prosper
Geb+spock: let your functional tests live long and prosperGeb+spock: let your functional tests live long and prosper
Geb+spock: let your functional tests live long and prosperEsther Lozano
 
GriffDnie (Griffon Demo)
GriffDnie (Griffon Demo)GriffDnie (Griffon Demo)
GriffDnie (Griffon Demo)Jorge Aguilera
 
Macro macro, burrito burrit
Macro macro, burrito burritMacro macro, burrito burrit
Macro macro, burrito burritMario García
 

Viewers also liked (10)

Advanced GORM - Performance, Customization and Monitoring
Advanced GORM - Performance, Customization and MonitoringAdvanced GORM - Performance, Customization and Monitoring
Advanced GORM - Performance, Customization and Monitoring
 
Little Did He Know ...
Little Did He Know ...Little Did He Know ...
Little Did He Know ...
 
Grails Transactions
Grails TransactionsGrails Transactions
Grails Transactions
 
Grails Worst Practices
Grails Worst PracticesGrails Worst Practices
Grails Worst Practices
 
When the saints go marching in recorder
When the saints go marching in recorderWhen the saints go marching in recorder
When the saints go marching in recorder
 
Geb+spock: let your functional tests live long and prosper
Geb+spock: let your functional tests live long and prosperGeb+spock: let your functional tests live long and prosper
Geb+spock: let your functional tests live long and prosper
 
De Java a Swift pasando por Groovy
De Java a Swift pasando por GroovyDe Java a Swift pasando por Groovy
De Java a Swift pasando por Groovy
 
GriffDnie (Griffon Demo)
GriffDnie (Griffon Demo)GriffDnie (Griffon Demo)
GriffDnie (Griffon Demo)
 
Macro macro, burrito burrit
Macro macro, burrito burritMacro macro, burrito burrit
Macro macro, burrito burrit
 
Spring security
Spring securitySpring security
Spring security
 

Similar to Hacking the Grails Spring Security 2.0 Plugin

There and back again: A story of a s
There and back again: A story of a sThere and back again: A story of a s
There and back again: A story of a sColin Harrington
 
securing-portlets-with-spring-security.pdf
securing-portlets-with-spring-security.pdfsecuring-portlets-with-spring-security.pdf
securing-portlets-with-spring-security.pdfjcarrey
 
securing-portlets-with-spring-security.pdf
securing-portlets-with-spring-security.pdfsecuring-portlets-with-spring-security.pdf
securing-portlets-with-spring-security.pdfjcarrey
 
Securing Portlets With Spring Security
Securing Portlets With Spring SecuritySecuring Portlets With Spring Security
Securing Portlets With Spring SecurityJohn Lewis
 
CBSecurity 3 - Secure Your ColdBox Applications
CBSecurity 3 - Secure Your ColdBox ApplicationsCBSecurity 3 - Secure Your ColdBox Applications
CBSecurity 3 - Secure Your ColdBox ApplicationsOrtus Solutions, Corp
 
JavaOne 2009 BOF-5189 Griffon In Depth
JavaOne 2009 BOF-5189 Griffon In DepthJavaOne 2009 BOF-5189 Griffon In Depth
JavaOne 2009 BOF-5189 Griffon In DepthDanno Ferrin
 
Java EE Application Security With PicketLink
Java EE Application Security With PicketLinkJava EE Application Security With PicketLink
Java EE Application Security With PicketLinkpigorcraveiro
 
Spring5 hibernate5 security5 lab step by step
Spring5 hibernate5 security5 lab step by stepSpring5 hibernate5 security5 lab step by step
Spring5 hibernate5 security5 lab step by stepRajiv Gupta
 
TangoWithDjango - ch8
TangoWithDjango - ch8TangoWithDjango - ch8
TangoWithDjango - ch8Asika Kuo
 
Apache Roller, Acegi Security and Single Sign-on
Apache Roller, Acegi Security and Single Sign-onApache Roller, Acegi Security and Single Sign-on
Apache Roller, Acegi Security and Single Sign-onMatt Raible
 
How many ways to monitor oracle golden gate-Collaborate 14
How many ways to monitor oracle golden gate-Collaborate 14How many ways to monitor oracle golden gate-Collaborate 14
How many ways to monitor oracle golden gate-Collaborate 14Bobby Curtis
 
Detecting headless browsers
Detecting headless browsersDetecting headless browsers
Detecting headless browsersSergey Shekyan
 
GDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API AuthorizationGDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API AuthorizationKAI CHU CHUNG
 
Super simple application security with Apache Shiro
Super simple application security with Apache ShiroSuper simple application security with Apache Shiro
Super simple application security with Apache ShiroMarakana Inc.
 
Implementing Authorization
Implementing AuthorizationImplementing Authorization
Implementing AuthorizationTorin Sandall
 
The hidden gems of Spring Security
The hidden gems of Spring SecurityThe hidden gems of Spring Security
The hidden gems of Spring SecurityMassimiliano Dessì
 
Dusan Lukic Magento 2 Integration Tests Meet Magento Serbia 2016
Dusan Lukic Magento 2 Integration Tests Meet Magento Serbia 2016Dusan Lukic Magento 2 Integration Tests Meet Magento Serbia 2016
Dusan Lukic Magento 2 Integration Tests Meet Magento Serbia 2016Dusan Lukic
 

Similar to Hacking the Grails Spring Security 2.0 Plugin (20)

There and back again: A story of a s
There and back again: A story of a sThere and back again: A story of a s
There and back again: A story of a s
 
securing-portlets-with-spring-security.pdf
securing-portlets-with-spring-security.pdfsecuring-portlets-with-spring-security.pdf
securing-portlets-with-spring-security.pdf
 
securing-portlets-with-spring-security.pdf
securing-portlets-with-spring-security.pdfsecuring-portlets-with-spring-security.pdf
securing-portlets-with-spring-security.pdf
 
Securing Portlets With Spring Security
Securing Portlets With Spring SecuritySecuring Portlets With Spring Security
Securing Portlets With Spring Security
 
CBSecurity 3 - Secure Your ColdBox Applications
CBSecurity 3 - Secure Your ColdBox ApplicationsCBSecurity 3 - Secure Your ColdBox Applications
CBSecurity 3 - Secure Your ColdBox Applications
 
Intro to Apache Shiro
Intro to Apache ShiroIntro to Apache Shiro
Intro to Apache Shiro
 
JavaOne 2009 BOF-5189 Griffon In Depth
JavaOne 2009 BOF-5189 Griffon In DepthJavaOne 2009 BOF-5189 Griffon In Depth
JavaOne 2009 BOF-5189 Griffon In Depth
 
Java EE Application Security With PicketLink
Java EE Application Security With PicketLinkJava EE Application Security With PicketLink
Java EE Application Security With PicketLink
 
Spring Security.ppt
Spring Security.pptSpring Security.ppt
Spring Security.ppt
 
Spring5 hibernate5 security5 lab step by step
Spring5 hibernate5 security5 lab step by stepSpring5 hibernate5 security5 lab step by step
Spring5 hibernate5 security5 lab step by step
 
TangoWithDjango - ch8
TangoWithDjango - ch8TangoWithDjango - ch8
TangoWithDjango - ch8
 
Apache Roller, Acegi Security and Single Sign-on
Apache Roller, Acegi Security and Single Sign-onApache Roller, Acegi Security and Single Sign-on
Apache Roller, Acegi Security and Single Sign-on
 
How many ways to monitor oracle golden gate-Collaborate 14
How many ways to monitor oracle golden gate-Collaborate 14How many ways to monitor oracle golden gate-Collaborate 14
How many ways to monitor oracle golden gate-Collaborate 14
 
Detecting headless browsers
Detecting headless browsersDetecting headless browsers
Detecting headless browsers
 
GDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API AuthorizationGDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
 
Super simple application security with Apache Shiro
Super simple application security with Apache ShiroSuper simple application security with Apache Shiro
Super simple application security with Apache Shiro
 
Struts2.0basic
Struts2.0basicStruts2.0basic
Struts2.0basic
 
Implementing Authorization
Implementing AuthorizationImplementing Authorization
Implementing Authorization
 
The hidden gems of Spring Security
The hidden gems of Spring SecurityThe hidden gems of Spring Security
The hidden gems of Spring Security
 
Dusan Lukic Magento 2 Integration Tests Meet Magento Serbia 2016
Dusan Lukic Magento 2 Integration Tests Meet Magento Serbia 2016Dusan Lukic Magento 2 Integration Tests Meet Magento Serbia 2016
Dusan Lukic Magento 2 Integration Tests Meet Magento Serbia 2016
 

Recently uploaded

Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 

Recently uploaded (20)

Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 

Hacking the Grails Spring Security 2.0 Plugin