SlideShare a Scribd company logo
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-On
Ravi Yasas
 
Enterprise Security mit Spring Security
Enterprise Security mit Spring SecurityEnterprise Security mit Spring Security
Enterprise Security mit Spring Security
Mike 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 & Cassandra
DataStax Academy
 
W3 conf hill-html5-security-realities
W3 conf hill-html5-security-realitiesW3 conf hill-html5-security-realities
W3 conf hill-html5-security-realities
Brad Hill
 
Getting Started with Spring Authorization Server
Getting Started with Spring Authorization ServerGetting Started with Spring Authorization Server
Getting Started with Spring Authorization Server
VMware 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 Buzdin
Java 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 Manipulation
Justin Bui
 
Testing Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam editionTesting Android Security Codemotion Amsterdam edition
Testing Android Security Codemotion Amsterdam edition
Jose 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 XSS
OWASP
 
[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens[OPD 2019] Attacking JWT tokens
[OPD 2019] Attacking JWT tokens
OWASP
 
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 Automation
Jonathan 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 2017
Matt Raible
 
Building an API Security Ecosystem
Building an API Security EcosystemBuilding an API Security Ecosystem
Building an API Security Ecosystem
Prabath Siriwardena
 
API Security : Patterns and Practices
API Security : Patterns and PracticesAPI Security : Patterns and Practices
API Security : Patterns and Practices
Prabath 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 OAuth2
Rodrigo 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 2018
Matt Raible
 
Spring4 security
Spring4 securitySpring4 security
Spring4 security
Sang 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 Monitoring
Burt Beckwith
 
Little Did He Know ...
Little Did He Know ...Little Did He Know ...
Little Did He Know ...
Burt Beckwith
 
Grails Transactions
Grails TransactionsGrails Transactions
Grails Transactions
Burt Beckwith
 
Grails Worst Practices
Grails Worst PracticesGrails Worst Practices
Grails Worst Practices
Burt 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 recorder
Chris 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 prosper
Esther Lozano
 
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
Alberto De Ávila Hernández
 
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 burrit
Mario 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 s
Colin 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 Security
John Lewis
 
CBSecurity 3 - Secure Your ColdBox Applications
CBSecurity 3 - Secure Your ColdBox ApplicationsCBSecurity 3 - Secure Your ColdBox Applications
CBSecurity 3 - Secure Your ColdBox Applications
Ortus Solutions, Corp
 
Intro to Apache Shiro
Intro to Apache ShiroIntro to Apache Shiro
Intro to Apache Shiro
Claire Hunsaker
 
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
Danno Ferrin
 
Java EE Application Security With PicketLink
Java EE Application Security With PicketLinkJava EE Application Security With PicketLink
Java EE Application Security With PicketLink
pigorcraveiro
 
Spring Security.ppt
Spring Security.pptSpring Security.ppt
Spring Security.ppt
Patiento Del Mar
 
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
Rajiv 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-on
Matt 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 14
Bobby Curtis
 
Detecting headless browsers
Detecting headless browsersDetecting headless browsers
Detecting headless browsers
Sergey 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 Authorization
KAI 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 Shiro
Marakana Inc.
 
Struts2.0basic
Struts2.0basicStruts2.0basic
Struts2.0basic
­Avishek A
 
Implementing Authorization
Implementing AuthorizationImplementing Authorization
Implementing Authorization
Torin Sandall
 
The hidden gems of Spring Security
The hidden gems of Spring SecurityThe hidden gems of Spring Security
The hidden gems of Spring Security
Massimiliano 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 2016
Dusan 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

Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
abdulrafaychaudhry
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 

Recently uploaded (20)

Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 

Hacking the Grails Spring Security 2.0 Plugin