Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

EnforceAuthenticationFilter.java 3.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright 2013 Laurens Vrijnsen
  3. * Copyright 2013 gitblit.com.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */package com.gitblit;
  17. import java.io.IOException;
  18. import java.text.MessageFormat;
  19. import javax.servlet.Filter;
  20. import javax.servlet.FilterChain;
  21. import javax.servlet.FilterConfig;
  22. import javax.servlet.ServletException;
  23. import javax.servlet.ServletRequest;
  24. import javax.servlet.ServletResponse;
  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. import org.slf4j.Logger;
  28. import org.slf4j.LoggerFactory;
  29. import com.gitblit.manager.IRuntimeManager;
  30. import com.gitblit.manager.ISessionManager;
  31. import com.gitblit.models.UserModel;
  32. /**
  33. * This filter enforces authentication via HTTP Basic Authentication, if the settings indicate so.
  34. * It looks at the settings "web.authenticateViewPages" and "web.enforceHttpBasicAuthentication"; if
  35. * both are true, any unauthorized access will be met with a HTTP Basic Authentication header.
  36. *
  37. * @author Laurens Vrijnsen
  38. *
  39. */
  40. public class EnforceAuthenticationFilter implements Filter {
  41. protected transient Logger logger = LoggerFactory.getLogger(getClass());
  42. /*
  43. * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
  44. */
  45. @Override
  46. public void init(FilterConfig filterConfig) throws ServletException {
  47. }
  48. /*
  49. * This does the actual filtering: is the user authenticated? If not, enforce HTTP authentication (401)
  50. *
  51. * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
  52. */
  53. @Override
  54. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  55. IStoredSettings settings = GitBlit.getManager(IRuntimeManager.class).getSettings();
  56. ISessionManager sessionManager = GitBlit.getManager(ISessionManager.class);
  57. Boolean mustForceAuth = settings.getBoolean(Keys.web.authenticateViewPages, false)
  58. && settings.getBoolean(Keys.web.enforceHttpBasicAuthentication, false);
  59. HttpServletRequest httpRequest = (HttpServletRequest) request;
  60. HttpServletResponse httpResponse = (HttpServletResponse) response;
  61. UserModel user = sessionManager.authenticate(httpRequest);
  62. if (mustForceAuth && (user == null)) {
  63. // not authenticated, enforce now:
  64. logger.debug(MessageFormat.format("EnforceAuthFilter: user not authenticated for URL {0}!", request.toString()));
  65. String challenge = MessageFormat.format("Basic realm=\"{0}\"", settings.getString(Keys.web.siteName, ""));
  66. httpResponse.setHeader("WWW-Authenticate", challenge);
  67. httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);
  68. return;
  69. } else {
  70. // user is authenticated, or don't care, continue handling
  71. chain.doFilter(request, response);
  72. }
  73. }
  74. /*
  75. * @see javax.servlet.Filter#destroy()
  76. */
  77. @Override
  78. public void destroy() {
  79. }
  80. }