Skip to content

Instantly share code, notes, and snippets.

View bvulaj's full-sized avatar
🏠
Working from home

Brandon Vulaj bvulaj

🏠
Working from home
View GitHub Profile
@bvulaj
bvulaj / SecurityConfiguration.java
Last active December 15, 2020 16:38
Multiple Oauth2 Providers in Spring Security
@Autowired
private FacebookPrincipalExtractor facebookPrincipalExtractor;
@Autowired
private FacebookAuthoritiesExtractor facebookAuthoritiesExtractor;
@Autowired
private GooglePrincipalExtractor googlePrincipalExtractor;
@Autowired
private GoogleAuthoritiesExtractor googleAuthoritiesExtractor;
@Bean
@Autowired
private PrincipalExtractor principalExtractor;
private Filter ssoFilter() {
OAuth2ClientAuthenticationProcessingFilter facebookFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/facebook");
OAuth2RestTemplate facebookTemplate = new OAuth2RestTemplate(facebook(), oauth2ClientContext);
facebookFilter.setRestTemplate(facebookTemplate);
UserInfoTokenServices tokenServices = new UserInfoTokenServices(facebookResource().getUserInfoUri(), facebook().getClientId());
tokenServices.setRestTemplate(facebookTemplate);
tokenServices.setPrincipalExtractor(principalExtractor);
@bvulaj
bvulaj / ProviderInfo.java
Created March 14, 2018 22:17
Basic Type Safe Injection
@Component
@ConfigurationProperties("provider")
public class ProviderInfo {
private String name;
private boolean enabled;
private List<String> roles;
}
@bvulaj
bvulaj / AppConfig.java
Last active March 14, 2018 22:18
Simple Field Injection w/ @value
@Configuration
public class AppConfig {
// Using SpEL
@Value("#{providerInfo.name ?: 'bar'}")
private String providerName;
// Injecting a Duration w/ a default
@Value("${timeout:500ms}")
private Duration timeout;
}
@bvulaj
bvulaj / AppConfig.java
Last active March 14, 2018 22:18
Third Party Injection
@Configuration
public class AppConfig {
@Bean
@ConfigurationProperties("provider")
public ProviderInfo providerInfo() {
return new ProviderInfo();
}
}
@bvulaj
bvulaj / NonInnerClass.java
Last active March 14, 2018 22:19
Nested Configuration Objects w/o an Inner Class
public class NonInnerClass {
private String name;
}
@bvulaj
bvulaj / InnerClassProperties.java
Last active March 14, 2018 22:19
Nested Configuration Objects w/ an Inner Class
@Component
@ConfigurationProperties("props")
public class InnerClassProperties {
private InnerClass innerClass;
private InnerClass otherInnerClass;
public static class InnerClass {
private String name;
}
}
@bvulaj
bvulaj / AppConfig.java
Last active March 14, 2018 22:18
Configuring Multiple Objects of the Same Type
@Configuration
public class AppConfig {
@Bean
@ConfigurationProperties("foo")
public ProviderInfo fooProviderInfo() {
return new ProviderInfo();
}
@Bean
@ConfigurationProperties("bar")
@bvulaj
bvulaj / when-im-remote-youre-remote.html
Last active August 1, 2017 16:02
When I'm Remote, You're Remote
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>When I'm Remote, You're Remote</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"></link>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="page-header">
@bvulaj
bvulaj / CrossDomainCookieCsrfTokenRepository.java
Created July 27, 2017 03:22
The Cookie based, provided implementation of CsrfTokenRepository, CookieCsrfTokenRepository, does not allow setting the domain or domain pattern, so it is not possible to use the cookie across sub-domains. This implementation, which assumes `httpOnly=false` at this time, allows you to customize the cookie's domain as you would with `org.springfr…
package com.phrankly.commons.security;
import java.lang.reflect.Method;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;