Commit eca582ee3c7b36327c908a6eafecfda730a7b3e5

Authored by Luciano Borges
1 parent 5a02fdef
Exists in master

Ajustes no filtro de autenticação Basic

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>
... ...