我正在将CAS 4升级到CAS6。我已经完成了几个Spring Boot 2应用程序,所以我知道我在做什么。我什至可以做一些Webflow,但只能从头开始。
该文档明确指出不要弄乱基本的webflow xml,并“注入”您自己的服务。
一个人如何“注入”服务?我真的只需要在登录页面中添加当天的消息。
有人有这么简单的例子吗?
答案 0 :(得分:1)
在我的方法下面找到经过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);
}
}
此后,我们应该在cas runtime中注入DailyMessageWebflowConfigurer
。这是通过创建配置类并注入我们的配置器来实现的。
@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
文件中。
答案 1 :(得分:1)
...将当天的消息添加到登录页面...
在CAS中不建议直接修改spring webflow。 read this for more info
因此,如果我不是您而不是热衷于Spring Webflow,我将尝试执行以下操作:
注意:
好,我们开始:
覆盖CasSupportActionsConfiguration
,仅添加initialFlowSetupAction
bean
添加一个自定义类(将其命名为MyInitialFlowSetupAction
)并实现InitialFlowSetupAction
在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>
看看这是否对您有帮助