Загрузите безопасную страницу с контроллера, безопасность Spring

Я использую Spring Web и безопасность 3.1. Мне нужно загрузить другую локальную страницу из защищенной области внутри защищенной области. Учитывая следующий код:

@Controller
@RequestMapping("/secure")
public class SecureArea {

    @RequestMapping("/downloadMe.xhtml")
    public String downloadMe(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // do stuff
        return "myJsp";
    }

    @RequestMapping("/viewStuff")
    public void viewStuff(HttpServletRequest request, HttpServletResponse response) throws Exception {
        InputStream in = (new URL("http://"+request.getServerName()+":"+request.getServerPort()+"/secure/downloadMe.xhtml").openStream());
        // read the input stream and do stuff with it, obviously returns my 401 page
    }
}

метод viewStuff не может видеть страницу /downloadMe.xhtml из-за весенней безопасности. Есть ли способ поместить учетные данные безопасности из моего запроса в новый запрос и загрузить файл downloadMe.xhtml.

*Это должно быть сделано таким или подобным образом, чтобы получить тот же результат. Я не могу просто вызвать downloadMe(запрос, ответ). Мне нужны данные, возвращаемые myJsp, и вся связанная с этим логика.


person ug_    schedule 16.08.2013    source источник


Ответы (1)


Решил свой вопрос! Я смог заставить это работать, передав JSESSIONID в качестве файла cookie в моем запросе. Итак, исходя из моего кода в моем вопросе, это будет выглядеть так:

@Controller
@RequestMapping("/secure")
public class SecureArea {

    @RequestMapping("/downloadMe.xhtml")
    public String downloadMe(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // do stuff
        return "myJsp";
    }

    @RequestMapping("/viewStuff")
    public void viewStuff(HttpServletRequest request, HttpServletResponse response) throws Exception {
        URL url = new URL("http://"+request.getServerName()+":"+request.getServerPort()+"/secure/downloadMe.xhtml");
        URLConnection con = url.openConnection();
        con.setDoOutput(true);
        // attach the session ID in the request
        con.setRequestProperty("Cookie", "JSESSIONID="+request.getSession().getId());
        con.connect();

        InputStream in = con.getInputStream();  
        // read the input stream and do stuff with it, obviously returns my 401 page
    }
}
person ug_    schedule 17.08.2013