X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=security%2Fruntime%2Forg.argeo.security.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fcore%2FMatchingAuthenticationProvider.java;fp=security%2Fruntime%2Forg.argeo.security.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fcore%2FMatchingAuthenticationProvider.java;h=d53bf7871516a7d3667fc0a253bd8a27c9c6ec9f;hb=b5d51f84e3a36a214bcb82dc82da19a123838639;hp=0000000000000000000000000000000000000000;hpb=28927a3628408ee59b5cde803975facea5df08ec;p=lgpl%2Fargeo-commons.git diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/MatchingAuthenticationProvider.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/MatchingAuthenticationProvider.java new file mode 100644 index 000000000..d53bf7871 --- /dev/null +++ b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/MatchingAuthenticationProvider.java @@ -0,0 +1,78 @@ +package org.argeo.security.core; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import org.apache.commons.io.IOUtils; +import org.springframework.core.io.Resource; +import org.springframework.security.AuthenticationException; +import org.springframework.security.BadCredentialsException; +import org.springframework.security.GrantedAuthority; +import org.springframework.security.GrantedAuthorityImpl; +import org.springframework.security.providers.UsernamePasswordAuthenticationToken; +import org.springframework.security.providers.dao.AbstractUserDetailsAuthenticationProvider; +import org.springframework.security.userdetails.User; +import org.springframework.security.userdetails.UserDetails; + +public class MatchingAuthenticationProvider extends + AbstractUserDetailsAuthenticationProvider { + + private Resource mapping; + private Properties properties; + + private List defaultRoles = new ArrayList(); + + @Override + protected void doAfterPropertiesSet() throws Exception { + properties = new Properties(); + InputStream propIn = mapping.getInputStream(); + try { + properties.load(propIn); + } finally { + IOUtils.closeQuietly(propIn); + } + } + + @Override + protected void additionalAuthenticationChecks(UserDetails userDetails, + UsernamePasswordAuthenticationToken authentication) + throws AuthenticationException { + if (!userDetails.getPassword().equals(authentication.getCredentials())) + throw new BadCredentialsException( + "Invalid credentails provided by " + + authentication.getName()); + } + + @Override + protected UserDetails retrieveUser(String username, + UsernamePasswordAuthenticationToken authentication) + throws AuthenticationException { + String value = properties.getProperty(username); + if (value == null) + throw new BadCredentialsException("User " + username + + " is not registered"); + List grantedAuthorities = new ArrayList(); + for (String role : defaultRoles) + grantedAuthorities.add(new GrantedAuthorityImpl(role)); + return new User( + username, + value, + true, + true, + true, + true, + grantedAuthorities + .toArray(new GrantedAuthority[grantedAuthorities.size()])); + } + + public void setMapping(Resource mapping) { + this.mapping = mapping; + } + + public void setDefaultRoles(List defaultRoles) { + this.defaultRoles = defaultRoles; + } + +}