Как использовать представления Micronaut для отправки параметров и установки локального хранилища? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь использовать аннотацию Micronaut Views для отправки нескольких параметров и установки локального хранилища, а затем перенаправления. Я использовал скрипт скрипт внутри шаблона autoredirect.html, который должен установить локальное хранилище, а затем window.location.replace для перенаправления. Пожалуйста, помогите мне со следующими 2 проблемами.

  1. Запрос попадает в методы post и get, но соответствующее представление не отправляется обратно, вместо этого после вычисления всего, что я получаю 404 Not Found .

    GET запрос -> http://localhost:8081/someapp/api/sso

  2. Это правильный способ установить локальное хранилище и перенаправить на другой относительный путь?

    POST-запрос с необходимыми параметрами для вычисления ролей и JWT -> http://localhost:8081/someapp/api/sso/saml

добавлена ​​ниже дополнительная запись в build.gradle

compile "io.micronaut:micronaut-views"
runtime "org.thymeleaf:thymeleaf:3.0.11.RELEASE"

просмотр местоположения

enter image description here Мой контроллер

@Controller('/someapp/api/sso')
@Slf4j
@CompileStatic
class SomeController {

    @View("home")
    @Get("/")
    HttpResponse index() {
        return HttpResponse.ok(CollectionUtils.mapOf("loggedIn", true, "username", "raka"))
    }

    @View("autoredirect")
    @Post('/saml')
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.TEXT_HTML)
    HttpResponse<String> samlLogin(@Nullable @Body LinkedHashMap payload) {
        //... some operations, computing user roles & jwt 
        if (payload != null) {
            String results = handler.call(payload)
            return HttpResponse.ok(results).
            header("JWT", jwt.toString())
        } else {
            return HttpResponse.badRequest()
        }
    }
}

home.html

<!DOCTYPE html>
<html lang="en" th:replace="~{layoutFile :: layout(~{::title}, ~{::section})}" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Home</title>
</head>
<body>
<section>
    <h1 th:if="${loggedIn}">username: <span th:text="${username}"></span></h1>
    <h1 th:unless="${loggedIn}">You are not logged in</h1>
</section>
</body>
</html>

autoredirect.html

<!DOCTYPE html>
<html>
<head>
    <title>Cassini</title>
</head>
<script type="text/javascript">
    localStorage.setItem('username', '${username}');
    localStorage.setItem('perm', '${perm}');
    localStorage.setItem('userDetails', '${userDetails}')
    window.location.replace('${redirectURL}');
</script>
<body>
</body>
</html>

Обновление

Я попытался явно добавить ниже строки в мой application.yml, но все равно не повезло. Вместо этого выдает сообщение 13:10:56.476 [pool-2-thread-3] DEBUG io.micronaut.views.ViewsFilter - view autoredirect not found.

micronaut.views.enabled: true
micronaut.views.folder: views
micronaut.router.static-resources.*.enabled: true
micronaut.router.static-resources.*.paths: classpath:public

Ответы [ 2 ]

1 голос
/ 07 мая 2019

У вас должна быть только конечная точка для возврата информации о пользователях. Тогда клиентская сторона может позвонить и сделать все, что нужно. Попытка поместить вещи в локальное хранилище, а затем перенаправить его в файл HTML, кажется мне взломом

0 голосов
/ 18 мая 2019

На первый вопрос:

Запрос попадает в пост и получает методы, но соответствующий вид не отправлено обратно, вместо того, чтобы вычислить все, я получаю 404 Not Found.

Я думаю, что вы пропускаете начальную косую черту / при попытке указать конкретный путь просмотра в аннотации @View.

Следующий блок кода выполняет рендеринг файла index.html, находящегося в папке ресурсов. views / home / index.html

@Controller("/home")
class HomeController {

    @Get("/")
    @View("/home/index")
    public Map index() {
        return [:]
    }

}

Для вас 2-й вопрос:

Это правильный способ установить локальное хранилище и перенаправить к другому родственнику? путь

Я не совсем уверен в ваших требованиях, но если вы пытаетесь использовать управление сеансами и безопасность в микроавтобусе, вы можете найти

  • Сессия Микронавта
  • Микронавт безопасности

    @Secured([RoleConstant.SUPER_ADMIN, RoleConstant.ADMIN])
    @Controller("/home")
    class HomeController {
        @Get("/")
        @View("/home/index")
        public Map index(@Nullable Principal principal) {
            return [username: principal.name]
        }
    }
    

Обратитесь к документации Mirconaut, также убедитесь, что вы обновляете до последней версии 1.1.1, так как в последнем выпуске исправлено несколько ошибок для пути thymeleaf & cookie, используемого в security & session.

...