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

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

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

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

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

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

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

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

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

введите здесь описание изображения Мой контроллер

@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

person Ricky    schedule 07.05.2019    source источник


Ответы (2)


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

person James Kleeh    schedule 07.05.2019
comment
Также, что не так с представлениями Micronaut, почему они не отображаются? Это то, что мне не хватает? - person Ricky; 08.05.2019

На ваш 1-й вопрос:

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

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

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

@Controller("/home")
class HomeController {

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

}

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

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

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

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

    @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, так как в последней версии исправлено несколько ошибок для тимелеафа и пути cookie, используемых в безопасности и сеансе.

person Aditya T    schedule 18.05.2019