Commit eca582ee3c7b36327c908a6eafecfda730a7b3e5
1 parent
5a02fdef
Exists in
master
Ajustes no filtro de autenticação Basic
Showing
2 changed files
with
24 additions
and
74 deletions
Show diff stats
impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/security/BasicAuthFilter.java
... | ... | @@ -36,98 +36,41 @@ |
36 | 36 | */ |
37 | 37 | package br.gov.frameworkdemoiselle.security; |
38 | 38 | |
39 | -import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; | |
40 | - | |
41 | -import java.io.IOException; | |
42 | 39 | import java.util.regex.Matcher; |
43 | 40 | import java.util.regex.Pattern; |
44 | 41 | |
45 | -import javax.servlet.Filter; | |
46 | -import javax.servlet.FilterChain; | |
47 | -import javax.servlet.FilterConfig; | |
48 | -import javax.servlet.ServletException; | |
49 | -import javax.servlet.ServletRequest; | |
50 | -import javax.servlet.ServletResponse; | |
51 | -import javax.servlet.http.HttpServletRequest; | |
52 | -import javax.servlet.http.HttpServletResponse; | |
53 | - | |
54 | 42 | import org.apache.commons.codec.binary.Base64; |
55 | 43 | |
56 | -import br.gov.frameworkdemoiselle.security.AuthenticationException; | |
57 | -import br.gov.frameworkdemoiselle.security.Credentials; | |
58 | -import br.gov.frameworkdemoiselle.security.InvalidCredentialsException; | |
59 | -import br.gov.frameworkdemoiselle.security.SecurityContext; | |
60 | 44 | import br.gov.frameworkdemoiselle.util.Beans; |
45 | +import br.gov.frameworkdemoiselle.util.Strings; | |
61 | 46 | |
62 | -public class BasicAuthFilter implements Filter { | |
47 | +public class BasicAuthFilter extends AbstractHTTPAuthorizationFilter { | |
63 | 48 | |
64 | - @Override | |
65 | - public void init(FilterConfig filterConfig) throws ServletException { | |
66 | - } | |
49 | + private String header; | |
67 | 50 | |
68 | 51 | @Override |
69 | - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, | |
70 | - ServletException { | |
71 | -// if (request instanceof HttpServletRequest && ((HttpServletRequest) request).getUserPrincipal() == null) { | |
72 | -// tryLogin((HttpServletRequest) request, (HttpServletResponse) response, chain); | |
73 | -// } else { | |
74 | - chain.doFilter(request, response); | |
75 | -// } | |
76 | - } | |
77 | - | |
78 | - private void tryLogin(HttpServletRequest request, HttpServletResponse response, FilterChain chain) | |
79 | - throws IOException, ServletException { | |
80 | - try { | |
81 | - boolean isLoggedIn = performLogin(getAuthHeader(request), request); | |
82 | - | |
83 | - chain.doFilter(request, response); | |
84 | - | |
85 | - if (isLoggedIn) { | |
86 | - performLogout(); | |
87 | - } | |
88 | - | |
89 | - } catch (InvalidCredentialsException cause) { | |
90 | - setUnauthorizedStatus(response, cause); | |
91 | - } | |
52 | + protected boolean isSupported(String authHeader) { | |
53 | + header = authHeader; | |
54 | + return !Strings.isEmpty(header); | |
92 | 55 | } |
93 | 56 | |
94 | - private boolean performLogin(String header, HttpServletRequest request) { | |
95 | - boolean result = false; | |
96 | - SecurityContext securityContext = Beans.getReference(SecurityContext.class); | |
97 | - | |
57 | + @Override | |
58 | + protected void prepareForLogin() { | |
98 | 59 | if (header != null) { |
99 | 60 | String[] basicCredentials = getCredentials(header); |
100 | 61 | |
101 | 62 | Credentials credentials = Beans.getReference(Credentials.class); |
102 | 63 | credentials.setUsername(basicCredentials[0]); |
103 | 64 | credentials.setPassword(basicCredentials[1]); |
104 | - | |
105 | - securityContext.login(); | |
106 | - result = securityContext.isLoggedIn(); | |
107 | 65 | } |
108 | - | |
109 | - return result; | |
110 | 66 | } |
111 | 67 | |
112 | - private void performLogout() { | |
113 | - Beans.getReference(SecurityContext.class).logout(); | |
114 | - } | |
115 | - | |
116 | - private void setUnauthorizedStatus(HttpServletResponse response, AuthenticationException cause) throws IOException { | |
117 | - response.setStatus(SC_UNAUTHORIZED); | |
118 | - response.setContentType("text/html"); | |
119 | - | |
120 | - response.getWriter().write(cause.getMessage()); | |
121 | - response.getWriter().flush(); | |
122 | - response.getWriter().close(); | |
123 | - } | |
124 | - | |
125 | - private String getAuthHeader(HttpServletRequest request) { | |
126 | - String result = request.getHeader("Authorization"); | |
127 | - return (result == null ? request.getHeader("authorization") : result); | |
68 | + @Override | |
69 | + protected void prepareForLogout() { | |
128 | 70 | } |
129 | 71 | |
130 | - private static String[] getCredentials(String header) throws InvalidCredentialsException { | |
72 | + private static String[] getCredentials(String header) | |
73 | + throws InvalidCredentialsException { | |
131 | 74 | String[] result = null; |
132 | 75 | |
133 | 76 | String regexp = "^Basic[ \\n]+(.+)$"; |
... | ... | @@ -140,13 +83,11 @@ public class BasicAuthFilter implements Filter { |
140 | 83 | } |
141 | 84 | |
142 | 85 | if (result == null || result.length != 2) { |
143 | - throw new InvalidCredentialsException("Formato inválido do cabeçalho"); | |
86 | + throw new InvalidCredentialsException( | |
87 | + "Formato inválido do cabeçalho"); | |
144 | 88 | } |
145 | 89 | |
146 | 90 | return result; |
147 | 91 | } |
148 | 92 | |
149 | - @Override | |
150 | - public void destroy() { | |
151 | - } | |
152 | -} | |
93 | +} | |
153 | 94 | \ No newline at end of file | ... | ... |
impl/extension/rest/src/main/resources/META-INF/web-fragment.xml
... | ... | @@ -41,6 +41,15 @@ |
41 | 41 | <name>demoiselle_rest</name> |
42 | 42 | |
43 | 43 | <filter> |
44 | + <filter-name>Demoiselle BasicAuth Filter</filter-name> | |
45 | + <filter-class>br.gov.frameworkdemoiselle.security.BasicAuthFilter</filter-class> | |
46 | + </filter> | |
47 | + <filter-mapping> | |
48 | + <filter-name>Demoiselle BasicAuth Filter</filter-name> | |
49 | + <url-pattern>/*</url-pattern> | |
50 | + </filter-mapping> | |
51 | + | |
52 | + <filter> | |
44 | 53 | <filter-name>Demoiselle Token Auth Filter</filter-name> |
45 | 54 | <filter-class>br.gov.frameworkdemoiselle.security.TokenAuthFilter</filter-class> |
46 | 55 | </filter> | ... | ... |