Working version - LDAP + Spring Boot
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
package org.baeldung;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
||||
|
||||
/**
|
||||
* Main Application Class - uses Spring Boot. Just run this as a normal Java
|
||||
* class to run up a Jetty Server (on http://localhost:8080)
|
||||
*
|
||||
*/
|
||||
@EnableAutoConfiguration
|
||||
@ComponentScan("org.baeldung")
|
||||
public class SampleLDAPApplication extends WebMvcConfigurerAdapter {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(SampleLDAPApplication.class, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addViewControllers(ViewControllerRegistry registry) {
|
||||
registry.addViewController("/login").setViewName("login");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package org.baeldung.controller;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
@Controller
|
||||
public class HomeController {
|
||||
|
||||
@RequestMapping("/homepage.html")
|
||||
public @ResponseBody String index() {
|
||||
return "homepage";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
package org.baeldung.controller;
|
||||
|
||||
import java.security.Principal;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
/**
|
||||
* Spring Controller Definitions.
|
||||
*/
|
||||
@Controller
|
||||
public class MyController {
|
||||
|
||||
@RequestMapping("/")
|
||||
public String init(Map<String, Object> model, Principal principal) {
|
||||
model.put("title", "PUBLIC AREA");
|
||||
model.put("message", "Any user can view this page");
|
||||
model.put("username", getUserName(principal));
|
||||
model.put("userroles", getUserRoles(principal));
|
||||
return "home";
|
||||
}
|
||||
|
||||
@RequestMapping("/secure")
|
||||
public String secure(Map<String, Object> model, Principal principal) {
|
||||
model.put("title", "SECURE AREA");
|
||||
model.put("message", "Only Authorised Users Can See This Page");
|
||||
model.put("username", getUserName(principal));
|
||||
model.put("userroles", getUserRoles(principal));
|
||||
return "home";
|
||||
}
|
||||
|
||||
private String getUserName(Principal principal){
|
||||
|
||||
if(principal == null){
|
||||
return "anonymous";
|
||||
}else{
|
||||
|
||||
final UserDetails currentUser = (UserDetails) ((Authentication) principal).getPrincipal();
|
||||
Collection<? extends GrantedAuthority> authorities = currentUser.getAuthorities();
|
||||
for(GrantedAuthority grantedAuthority : authorities) {
|
||||
System.out.println(grantedAuthority.getAuthority());
|
||||
}
|
||||
return principal.getName();
|
||||
}
|
||||
}
|
||||
|
||||
private Collection<String> getUserRoles(Principal principal){
|
||||
|
||||
if(principal == null){
|
||||
return Arrays.asList("none");
|
||||
}else{
|
||||
|
||||
Set<String> roles = new HashSet<String>();
|
||||
|
||||
final UserDetails currentUser = (UserDetails) ((Authentication) principal).getPrincipal();
|
||||
Collection<? extends GrantedAuthority> authorities = currentUser.getAuthorities();
|
||||
for(GrantedAuthority grantedAuthority : authorities) {
|
||||
roles.add(grantedAuthority.getAuthority());
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package org.baeldung.security;
|
||||
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
/**
|
||||
* Security Configuration - LDAP and HTTP Authorizations.
|
||||
*/
|
||||
@EnableAutoConfiguration
|
||||
@ComponentScan
|
||||
@Controller
|
||||
public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
|
||||
@Override
|
||||
protected void configure(AuthenticationManagerBuilder auth)
|
||||
throws Exception {
|
||||
|
||||
auth.ldapAuthentication()
|
||||
.userSearchBase("ou=people")
|
||||
.userSearchFilter("(uid={0})")
|
||||
.groupSearchBase("ou=groups")
|
||||
.groupSearchFilter("member={0}")
|
||||
.contextSource()
|
||||
.root("dc=baeldung,dc=com")
|
||||
.ldif("classpath:users.ldif");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure(HttpSecurity http) throws Exception {
|
||||
|
||||
http
|
||||
.authorizeRequests()
|
||||
.antMatchers("/", "/home").permitAll()
|
||||
.anyRequest().authenticated();
|
||||
http
|
||||
.formLogin()
|
||||
.loginPage("/login")
|
||||
.permitAll()
|
||||
.and()
|
||||
.logout()
|
||||
.logoutSuccessUrl("/");
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package org.baeldung.spring;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
@ComponentScan
|
||||
@EnableAutoConfiguration
|
||||
public class Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package org.baeldung.spring;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;
|
||||
|
||||
@Configuration
|
||||
@EnableWebMvcSecurity
|
||||
public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
|
||||
@Override
|
||||
protected void configure(AuthenticationManagerBuilder auth)
|
||||
throws Exception {
|
||||
|
||||
auth.ldapAuthentication()
|
||||
.userSearchBase("ou=people")
|
||||
.userSearchFilter("(uid={0})")
|
||||
.groupSearchBase("ou=groups")
|
||||
.groupSearchFilter("member={0}")
|
||||
.contextSource()
|
||||
.root("dc=baeldung,dc=com")
|
||||
.ldif("classpath:users.ldif");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user