Search in sources :

Example 1 with ArticleQueryService

use of org.b3log.solo.service.ArticleQueryService in project solo by b3log.

the class PermalinkFilter method doFilter.

/**
     * Tries to dispatch request to article processor.
     *
     * @param request the specified request
     * @param response the specified response
     * @param chain filter chain
     * @throws IOException io exception
     * @throws ServletException servlet exception
     */
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
    final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    final HttpServletResponse httpServletResponse = (HttpServletResponse) response;
    final String requestURI = httpServletRequest.getRequestURI();
    LOGGER.log(Level.DEBUG, "Request URI[{0}]", requestURI);
    final String contextPath = Latkes.getContextPath();
    final String permalink = StringUtils.substringAfter(requestURI, contextPath);
    if (PermalinkQueryService.invalidPermalinkFormat(permalink)) {
        LOGGER.log(Level.DEBUG, "Skip filter request[URI={0}]", permalink);
        chain.doFilter(request, response);
        return;
    }
    JSONObject article;
    JSONObject page = null;
    final LatkeBeanManager beanManager = Lifecycle.getBeanManager();
    try {
        final ArticleRepository articleRepository = beanManager.getReference(ArticleRepositoryImpl.class);
        article = articleRepository.getByPermalink(permalink);
        if (null == article) {
            final PageRepository pageRepository = beanManager.getReference(PageRepositoryImpl.class);
            page = pageRepository.getByPermalink(permalink);
        }
        if (null == page && null == article) {
            LOGGER.log(Level.DEBUG, "Not found article/page with permalink[{0}]", permalink);
            chain.doFilter(request, response);
            return;
        }
    } catch (final RepositoryException e) {
        LOGGER.log(Level.ERROR, "Processes article permalink filter failed", e);
        httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
        return;
    }
    // If requests an article and the article need view passowrd, sends redirect to the password form
    final ArticleQueryService articleQueryService = beanManager.getReference(ArticleQueryService.class);
    if (null != article && articleQueryService.needViewPwd(httpServletRequest, article)) {
        try {
            httpServletResponse.sendRedirect(Latkes.getServePath() + "/console/article-pwd?articleId=" + article.optString(Keys.OBJECT_ID));
            return;
        } catch (final Exception e) {
            httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
    }
    dispatchToArticleOrPageProcessor(request, response, article, page);
}
Also used : HttpServletRequest(javax.servlet.http.HttpServletRequest) JSONObject(org.json.JSONObject) PageRepository(org.b3log.solo.repository.PageRepository) ArticleQueryService(org.b3log.solo.service.ArticleQueryService) HttpServletResponse(javax.servlet.http.HttpServletResponse) ArticleRepository(org.b3log.solo.repository.ArticleRepository) RepositoryException(org.b3log.latke.repository.RepositoryException) ServletException(javax.servlet.ServletException) RepositoryException(org.b3log.latke.repository.RepositoryException) IOException(java.io.IOException) LatkeBeanManager(org.b3log.latke.ioc.LatkeBeanManager)

Aggregations

IOException (java.io.IOException)1 ServletException (javax.servlet.ServletException)1 HttpServletRequest (javax.servlet.http.HttpServletRequest)1 HttpServletResponse (javax.servlet.http.HttpServletResponse)1 LatkeBeanManager (org.b3log.latke.ioc.LatkeBeanManager)1 RepositoryException (org.b3log.latke.repository.RepositoryException)1 ArticleRepository (org.b3log.solo.repository.ArticleRepository)1 PageRepository (org.b3log.solo.repository.PageRepository)1 ArticleQueryService (org.b3log.solo.service.ArticleQueryService)1 JSONObject (org.json.JSONObject)1