Commit 3d44961e4ee37436a7dce2b6326476257b8a10d2
1 parent
eca582ee
Exists in
master
Correção no BasicAuthFilter
Showing
9 changed files
with
152 additions
and
139 deletions
Show diff stats
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/BadRequestException.java
| ... | ... | @@ -2,9 +2,7 @@ package br.gov.frameworkdemoiselle; |
| 2 | 2 | |
| 3 | 3 | import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; |
| 4 | 4 | |
| 5 | -import javax.xml.ws.http.HTTPException; | |
| 6 | - | |
| 7 | -public class BadRequestException extends HTTPException { | |
| 5 | +public class BadRequestException extends HttpViolationException { | |
| 8 | 6 | |
| 9 | 7 | private static final long serialVersionUID = 1L; |
| 10 | 8 | ... | ... |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/ForbiddenException.java
0 → 100644
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +package br.gov.frameworkdemoiselle; | |
| 2 | + | |
| 3 | +import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN; | |
| 4 | + | |
| 5 | +import javax.xml.ws.http.HTTPException; | |
| 6 | + | |
| 7 | +public class ForbiddenException extends HTTPException { | |
| 8 | + | |
| 9 | + private static final long serialVersionUID = 1L; | |
| 10 | + | |
| 11 | + public ForbiddenException() { | |
| 12 | + super(SC_FORBIDDEN); | |
| 13 | + } | |
| 14 | +} | ... | ... |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/HttpViolationException.java
0 → 100644
| ... | ... | @@ -0,0 +1,97 @@ |
| 1 | +package br.gov.frameworkdemoiselle; | |
| 2 | + | |
| 3 | +import java.util.HashSet; | |
| 4 | +import java.util.Set; | |
| 5 | + | |
| 6 | +public class HttpViolationException extends Exception { | |
| 7 | + | |
| 8 | + private static final long serialVersionUID = 1L; | |
| 9 | + | |
| 10 | + private Set<Violation> violations = new HashSet<Violation>(); | |
| 11 | + | |
| 12 | + private int statusCode; | |
| 13 | + | |
| 14 | + public HttpViolationException(int statusCode) { | |
| 15 | + this.statusCode = statusCode; | |
| 16 | + } | |
| 17 | + | |
| 18 | + public HttpViolationException addViolation(String property, String message) { | |
| 19 | + this.violations.add(new Violation(property, message)); | |
| 20 | + return this; | |
| 21 | + } | |
| 22 | + | |
| 23 | + public Set<Violation> getViolations() { | |
| 24 | + return violations; | |
| 25 | + } | |
| 26 | + | |
| 27 | + public static class Violation { | |
| 28 | + | |
| 29 | + public String property; | |
| 30 | + | |
| 31 | + public String message; | |
| 32 | + | |
| 33 | + public Violation() { | |
| 34 | + } | |
| 35 | + | |
| 36 | + public Violation(String property, String message) { | |
| 37 | + this.property = property; | |
| 38 | + this.message = message; | |
| 39 | + } | |
| 40 | + | |
| 41 | + public String getProperty() { | |
| 42 | + return property; | |
| 43 | + } | |
| 44 | + | |
| 45 | + public void setProperty(String property) { | |
| 46 | + this.property = property; | |
| 47 | + } | |
| 48 | + | |
| 49 | + public String getMessage() { | |
| 50 | + return message; | |
| 51 | + } | |
| 52 | + | |
| 53 | + public void setMessage(String message) { | |
| 54 | + this.message = message; | |
| 55 | + } | |
| 56 | + | |
| 57 | + @Override | |
| 58 | + public int hashCode() { | |
| 59 | + final int prime = 31; | |
| 60 | + int result = 1; | |
| 61 | + result = prime * result + ((message == null) ? 0 : message.hashCode()); | |
| 62 | + result = prime * result + ((property == null) ? 0 : property.hashCode()); | |
| 63 | + return result; | |
| 64 | + } | |
| 65 | + | |
| 66 | + @Override | |
| 67 | + public boolean equals(Object obj) { | |
| 68 | + if (this == obj) | |
| 69 | + return true; | |
| 70 | + if (obj == null) | |
| 71 | + return false; | |
| 72 | + if (getClass() != obj.getClass()) | |
| 73 | + return false; | |
| 74 | + Violation other = (Violation) obj; | |
| 75 | + if (message == null) { | |
| 76 | + if (other.message != null) | |
| 77 | + return false; | |
| 78 | + } else if (!message.equals(other.message)) | |
| 79 | + return false; | |
| 80 | + if (property == null) { | |
| 81 | + if (other.property != null) | |
| 82 | + return false; | |
| 83 | + } else if (!property.equals(other.property)) | |
| 84 | + return false; | |
| 85 | + return true; | |
| 86 | + } | |
| 87 | + | |
| 88 | + @Override | |
| 89 | + public String toString() { | |
| 90 | + return this.property + " " + this.message; | |
| 91 | + } | |
| 92 | + } | |
| 93 | + | |
| 94 | + public int getStatusCode() { | |
| 95 | + return statusCode; | |
| 96 | + } | |
| 97 | +} | ... | ... |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/PreconditionFailedException.java
| ... | ... | @@ -1,90 +0,0 @@ |
| 1 | -package br.gov.frameworkdemoiselle; | |
| 2 | - | |
| 3 | -import java.util.HashSet; | |
| 4 | -import java.util.Set; | |
| 5 | - | |
| 6 | -public class PreconditionFailedException extends Exception { | |
| 7 | - | |
| 8 | - private static final long serialVersionUID = 1L; | |
| 9 | - | |
| 10 | - private Set<Violation> violations = new HashSet<Violation>(); | |
| 11 | - | |
| 12 | - public PreconditionFailedException() { | |
| 13 | - } | |
| 14 | - | |
| 15 | - public PreconditionFailedException addViolation(String property, String message) { | |
| 16 | - this.violations.add(new Violation(property, message)); | |
| 17 | - return this; | |
| 18 | - } | |
| 19 | - | |
| 20 | - public Set<Violation> getViolations() { | |
| 21 | - return violations; | |
| 22 | - } | |
| 23 | - | |
| 24 | - public static class Violation { | |
| 25 | - | |
| 26 | - public String property; | |
| 27 | - | |
| 28 | - public String message; | |
| 29 | - | |
| 30 | - public Violation() { | |
| 31 | - } | |
| 32 | - | |
| 33 | - public Violation(String property, String message) { | |
| 34 | - this.property = property; | |
| 35 | - this.message = message; | |
| 36 | - } | |
| 37 | - | |
| 38 | - public String getProperty() { | |
| 39 | - return property; | |
| 40 | - } | |
| 41 | - | |
| 42 | - public void setProperty(String property) { | |
| 43 | - this.property = property; | |
| 44 | - } | |
| 45 | - | |
| 46 | - public String getMessage() { | |
| 47 | - return message; | |
| 48 | - } | |
| 49 | - | |
| 50 | - public void setMessage(String message) { | |
| 51 | - this.message = message; | |
| 52 | - } | |
| 53 | - | |
| 54 | - @Override | |
| 55 | - public int hashCode() { | |
| 56 | - final int prime = 31; | |
| 57 | - int result = 1; | |
| 58 | - result = prime * result + ((message == null) ? 0 : message.hashCode()); | |
| 59 | - result = prime * result + ((property == null) ? 0 : property.hashCode()); | |
| 60 | - return result; | |
| 61 | - } | |
| 62 | - | |
| 63 | - @Override | |
| 64 | - public boolean equals(Object obj) { | |
| 65 | - if (this == obj) | |
| 66 | - return true; | |
| 67 | - if (obj == null) | |
| 68 | - return false; | |
| 69 | - if (getClass() != obj.getClass()) | |
| 70 | - return false; | |
| 71 | - Violation other = (Violation) obj; | |
| 72 | - if (message == null) { | |
| 73 | - if (other.message != null) | |
| 74 | - return false; | |
| 75 | - } else if (!message.equals(other.message)) | |
| 76 | - return false; | |
| 77 | - if (property == null) { | |
| 78 | - if (other.property != null) | |
| 79 | - return false; | |
| 80 | - } else if (!property.equals(other.property)) | |
| 81 | - return false; | |
| 82 | - return true; | |
| 83 | - } | |
| 84 | - | |
| 85 | - @Override | |
| 86 | - public String toString() { | |
| 87 | - return this.property + " " + this.message; | |
| 88 | - } | |
| 89 | - } | |
| 90 | -} |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/UnprocessableEntityException.java
0 → 100644
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConstraintViolationExceptionMapper.java
| ... | ... | @@ -10,14 +10,14 @@ import javax.ws.rs.core.Response; |
| 10 | 10 | import javax.ws.rs.ext.ExceptionMapper; |
| 11 | 11 | import javax.ws.rs.ext.Provider; |
| 12 | 12 | |
| 13 | -import br.gov.frameworkdemoiselle.PreconditionFailedException; | |
| 13 | +import br.gov.frameworkdemoiselle.UnprocessableEntityException; | |
| 14 | 14 | |
| 15 | 15 | @Provider |
| 16 | 16 | public class ConstraintViolationExceptionMapper implements ExceptionMapper<ConstraintViolationException> { |
| 17 | 17 | |
| 18 | 18 | @Override |
| 19 | 19 | public Response toResponse(ConstraintViolationException exception) { |
| 20 | - PreconditionFailedException failed = new PreconditionFailedException(); | |
| 20 | + UnprocessableEntityException failed = new UnprocessableEntityException(); | |
| 21 | 21 | |
| 22 | 22 | for (Iterator<ConstraintViolation<?>> iter = exception.getConstraintViolations().iterator(); iter.hasNext();) { |
| 23 | 23 | ConstraintViolation<?> violation = iter.next(); | ... | ... |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/HttpViolationExceptionMapper.java
0 → 100644
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +package br.gov.frameworkdemoiselle.internal.implementation; | |
| 2 | + | |
| 3 | +import javax.ws.rs.core.Response; | |
| 4 | +import javax.ws.rs.ext.ExceptionMapper; | |
| 5 | +import javax.ws.rs.ext.Provider; | |
| 6 | + | |
| 7 | +import br.gov.frameworkdemoiselle.HttpViolationException; | |
| 8 | + | |
| 9 | +@Provider | |
| 10 | +public class HttpViolationExceptionMapper implements ExceptionMapper<HttpViolationException> { | |
| 11 | + | |
| 12 | + @Override | |
| 13 | + public Response toResponse(HttpViolationException exception) { | |
| 14 | + return Response.status(exception.getStatusCode()).entity(exception.getViolations()).build(); | |
| 15 | + } | |
| 16 | +} | ... | ... |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/PreconditionFailedExceptionMapper.java
| ... | ... | @@ -1,18 +0,0 @@ |
| 1 | -package br.gov.frameworkdemoiselle.internal.implementation; | |
| 2 | - | |
| 3 | -import static javax.ws.rs.core.Response.Status.PRECONDITION_FAILED; | |
| 4 | - | |
| 5 | -import javax.ws.rs.core.Response; | |
| 6 | -import javax.ws.rs.ext.ExceptionMapper; | |
| 7 | -import javax.ws.rs.ext.Provider; | |
| 8 | - | |
| 9 | -import br.gov.frameworkdemoiselle.PreconditionFailedException; | |
| 10 | - | |
| 11 | -@Provider | |
| 12 | -public class PreconditionFailedExceptionMapper implements ExceptionMapper<PreconditionFailedException> { | |
| 13 | - | |
| 14 | - @Override | |
| 15 | - public Response toResponse(PreconditionFailedException exception) { | |
| 16 | - return Response.status(PRECONDITION_FAILED).entity(exception.getViolations()).build(); | |
| 17 | - } | |
| 18 | -} |
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/security/BasicAuthFilter.java
| ... | ... | @@ -36,9 +36,6 @@ |
| 36 | 36 | */ |
| 37 | 37 | package br.gov.frameworkdemoiselle.security; |
| 38 | 38 | |
| 39 | -import java.util.regex.Matcher; | |
| 40 | -import java.util.regex.Pattern; | |
| 41 | - | |
| 42 | 39 | import org.apache.commons.codec.binary.Base64; |
| 43 | 40 | |
| 44 | 41 | import br.gov.frameworkdemoiselle.util.Beans; |
| ... | ... | @@ -46,48 +43,37 @@ import br.gov.frameworkdemoiselle.util.Strings; |
| 46 | 43 | |
| 47 | 44 | public class BasicAuthFilter extends AbstractHTTPAuthorizationFilter { |
| 48 | 45 | |
| 49 | - private String header; | |
| 46 | + private String credentials; | |
| 50 | 47 | |
| 51 | 48 | @Override |
| 52 | 49 | protected boolean isSupported(String authHeader) { |
| 53 | - header = authHeader; | |
| 54 | - return !Strings.isEmpty(header); | |
| 50 | + credentials = extractCredentials("Basic", authHeader); | |
| 51 | + return !Strings.isEmpty(credentials); | |
| 55 | 52 | } |
| 56 | 53 | |
| 57 | 54 | @Override |
| 58 | 55 | protected void prepareForLogin() { |
| 59 | - if (header != null) { | |
| 60 | - String[] basicCredentials = getCredentials(header); | |
| 56 | + String[] basicCredentials = getCredentials(credentials); | |
| 61 | 57 | |
| 62 | - Credentials credentials = Beans.getReference(Credentials.class); | |
| 63 | - credentials.setUsername(basicCredentials[0]); | |
| 64 | - credentials.setPassword(basicCredentials[1]); | |
| 65 | - } | |
| 58 | + Credentials credentials = Beans.getReference(Credentials.class); | |
| 59 | + credentials.setUsername(basicCredentials[0]); | |
| 60 | + credentials.setPassword(basicCredentials[1]); | |
| 66 | 61 | } |
| 67 | 62 | |
| 68 | 63 | @Override |
| 69 | 64 | protected void prepareForLogout() { |
| 70 | 65 | } |
| 71 | 66 | |
| 72 | - private static String[] getCredentials(String header) | |
| 73 | - throws InvalidCredentialsException { | |
| 67 | + private static String[] getCredentials(String header) throws InvalidCredentialsException { | |
| 74 | 68 | String[] result = null; |
| 75 | 69 | |
| 76 | - String regexp = "^Basic[ \\n]+(.+)$"; | |
| 77 | - Pattern pattern = Pattern.compile(regexp); | |
| 78 | - Matcher matcher = pattern.matcher(header); | |
| 79 | - | |
| 80 | - if (matcher.matches()) { | |
| 81 | - byte[] decoded = Base64.decodeBase64(matcher.group(1)); | |
| 82 | - result = new String(decoded).split(":"); | |
| 83 | - } | |
| 70 | + byte[] decoded = Base64.decodeBase64(header); | |
| 71 | + result = new String(decoded).split(":"); | |
| 84 | 72 | |
| 85 | 73 | if (result == null || result.length != 2) { |
| 86 | - throw new InvalidCredentialsException( | |
| 87 | - "Formato inválido do cabeçalho"); | |
| 74 | + throw new InvalidCredentialsException("Formato inválido do cabeçalho"); | |
| 88 | 75 | } |
| 89 | 76 | |
| 90 | 77 | return result; |
| 91 | 78 | } |
| 92 | - | |
| 93 | -} | |
| 94 | 79 | \ No newline at end of file |
| 80 | +} | ... | ... |