SpringSecurity, кажется, шифрует мои загружаемые файлы - PullRequest
0 голосов
/ 22 октября 2018

Я разрабатываю веб-сайт MVC, где вы можете загружать материалы, и до сегодняшнего дня все работало так, как задумано.Я решил включить Spring Security, чтобы защитить свои URL-адреса от несанкционированного доступа и тому подобного.

Мне удалось реализовать это без серьезных проблем, но я заметил кое-что действительно странное.До внедрения Spring Security я мог загрузить файлы PDF с веб-сайта, но после всего, что я могу получить, это кусок данных: Пример

Мой код для обслуживания файлов - этоследующее:

public void getPdfBook(String fileName, HttpServletResponse response) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Module.xml");
        PropertiesDAO properties = (PropertiesDAO) context.getBean("propertiesDAO");
        String path = properties.getDirectory();

        try {
            File file = new File(path + File.separator + fileName);

            if (file.exists()) {
                FileUtils.copyFile(file, response.getOutputStream());

                response.setContentType("application/pdf");
                response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".pdf");
                response.flushBuffer();
            } else {
                System.out.println("File Not Found on: " + path + File.separator + fileName);
            }
        } catch (IOException exception) {
            System.out.println("IOException");
            System.out.println(exception.getMessage());
        }
    }

И моя конфигурация URL-адреса Spring Security следующая (наряду с другими вещами):

<security:http pattern="/registerUser" security="none" />
<security:http auto-config="true" use-expressions="true">
    <security:form-login login-page="/login"
    login-processing-url="/authenticateUser"
    default-target-url="/"
    authentication-failure-url="/login"
    username-parameter="username"
    password-parameter="password"/>
    <security:intercept-url pattern="/login" access="permitAll" />
    <security:intercept-url pattern="/newBook" access="hasAuthority('AUTH_ADMIN')" />
    <security:intercept-url pattern="/**" access="hasAnyAuthority('AUTH_USER', 'AUTH_ADMIN')" />
    <security:logout delete-cookies="JSESSIONID" logout-url="/logout" />
</security:http>

URL-адрес, используемый для загрузки PDF, - это "/ getPdfBook", которыйнаходится в шаблоне "/ **".Я могу сделать запрос, но результат неправильный (изображение я разместил).

Может кто-нибудь помочь?Спасибо !!

PS: Если я отключаю Spring Security для этого URL, то он работает просто отлично.

1 Ответ

0 голосов
/ 22 октября 2018

Я решил это!Изменен этот код:

response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".pdf");

На этот:

response.setHeader("Content-disposition", "inline;filename=" + fileName + ".pdf");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...