внедрить данные модели в весенний поток в cas - PullRequest
1 голос
/ 24 апреля 2019

Я обновляю CAS 4 до CAS 6. Я сделал несколько приложений Spring Boot 2, так что я знаю, что я там делаю.Я даже могу сделать какой-то веб-поток, но только с нуля.

В документации четко говорится, что не следует связываться с базовым веб-потоком xml и «внедрять» свои собственные службы.

Как «внедрить» службу?Мне просто нужно добавить сообщение дня на страницу входа.

У кого-нибудь есть пример чего-то такого простого?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

... добавить сообщение дня на страницу входа ...

В CAS прямое изменение пружинного потока не рекомендуется. прочитайте это для получения дополнительной информации

Так что, если бы я был тобой, вместо того чтобы возиться с весенним веб-потоком, я бы попытался сделать что-то вроде следующего:

Примечание:

  • Имейте в виду, что это может быть не рекомендуемый способ сделать это, но я думаю, что это будет работать, и гораздо меньше работы, чем переопределение весеннего потока
  • Как вы сказали, вы хорошо знакомы с загрузкой Spring, поэтому я не буду скучать по деталям реализации, я могу проконсультироваться, если вы / другие читатели запутались
  • Если ваше сообщение дня может быть жестко запрограммировано, просто пропустите 1-3 и переходите прямо к 4.

Хорошо, мы идем:

  1. Переопределить CasSupportActionsConfiguration, добавляя только initialFlowSetupAction bean

  2. Добавление пользовательского класса (пусть назвали его MyInitialFlowSetupAction) и реализация InitialFlowSetupAction

  3. В MyInitialFlowSetupAction добавьте что-то вроде этого:


    @Override
    public Event doExecute(final RequestContext context) {
        Event returnEvent = super.doExecute(context);
        configureMyAwesomeMessageOfTheDay(context) 
        return returnEvent;
    }



    private void configureMyAwesomeMessageOfTheDay(final RequestContext context) {
         String messageOfTheDay = "Spring is the best season!";//Your logic here
         context.getFlowScope().put("MESSAGE_OF_THE_DAY", messageOfTheDay);
    }

4. CAS 6 использует наложение WAR, поэтому вы можете наложить html-файл, включая этот

https://github.com/apereo/cas/blob/v6.0.3/webapp/resources/templates/casLoginView.html

наложите этот файл и добавьте в него свой MESSAGE_OF_THE_DAY

<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
... 

<body class="login">
<main role="main" class="container mt-3 mb-3">
Message of the day is: ${MESSAGE_OF_THE_DAY}
...
</main>
</body>
</html>

Посмотрите, поможет ли это вам

1 голос
/ 24 апреля 2019

Найдите ниже мой подход, протестированный на установке cas-maven-overlay с cas-версией на 5.3.x. Некоторые вещи могут отличаться в cas 6 ветке, но я предполагаю, что основная идея остается.

Во-первых, мы должны создать класс Action, который будет внедрен в поток входа в систему и добавит желаемое сообщение в область действия потока, чтобы оно было доступно в шаблоне (представление).

public class DailyMessageAction extends AbstractAction{
    @Override
    protected Event doExecute(RequestContext context) throws Exception {
        context.getFlowScope().asMap().put("dailyMessage", "YOUR_AWESOME_MESSAGE");
        return success();
    }       
}

Затем создайте класс WebflowConfigurer и добавьте наш недавно созданный DailyMessageAction в список действий (см. Метод doInitialize).

public class DailyMessageWebflowConfigurer extends AbstractCasWebflowConfigurer{
    final Action dailyMessageAction;

    public DailyMessageWebflowConfigurer(FlowBuilderServices flowBuilderServices,
                               FlowDefinitionRegistry flowDefinitionRegistry,
                               ApplicationContext applicationContext,
                               CasConfigurationProperties casProperties,Action dailyMessageAction){
        super(flowBuilderServices, flowDefinitionRegistry, applicationContext, casProperties);
        this.dailyMessageAction = dailyMessageAction;
    }

    @Override
    protected void doInitialize() {
        final Flow flow = super.getLoginFlow();
        flow.getStartActionList().add(dailyMessageAction);
    }
}

После этого мы должны ввести DailyMessageWebflowConfigurer во время выполнения cas. Это достигается созданием класса конфигурации и внедрением нашего конфигуратора.

@Configuration
public class CustomWebflowConfiguration {

@Autowired
private CasConfigurationProperties casProperties;

@Autowired
@Qualifier("loginFlowRegistry")
private FlowDefinitionRegistry loginFlowDefinitionRegistry;

@Autowired
private ApplicationContext applicationContext;

@Autowired
private FlowBuilderServices flowBuilderServices; 
    @RefreshScope
    @ConditionalOnMissingBean(name = "dailyMessageAction")
    @Bean
    public Action dailyMessageAction(){
        return new DailyMessageAction();
    }

    @ConditionalOnMissingBean(name = "dailyMessageWebflowConfigurer")
    @Bean
    @RefreshScope
    public CasWebflowConfigurer dailyMessageWebflowConfigurer(){
        final DailyMessageWebflowConfigurer w = new DailyMessageWebflowConfigurer(flowBuilderServices,
                loginFlowDefinitionRegistry,
                applicationContext,
                casProperties, 
                dailyMessageAction());
        w.initialize();
        return w;
    }
}

Включите наш CustomWebflowConfiguration класс в META-INF/spring.factories:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=your_package.CustomWebflowConfiguration

Последний шаг - представить добавленное сообщение в виде. Достигается добавлением этой строки

<div th:utext="${dailyMessage}"></div>

в файле templates/casLoginView.html.

...