Java vaadin4spring&x2B;不带Spring引导的应用程序

Java vaadin4spring&x2B;不带Spring引导的应用程序,java,spring,spring-security,vaadin,vaadin4spring,Java,Spring,Spring Security,Vaadin,Vaadin4spring,我正在尝试使用vaadin4spring()为我的Spring应用程序设置安全性。在作者页面上有一个明确的例子说明了如何做到这一点,但问题是这个例子使用的是Spring Boot,而我的应用程序不是。我设法运行了应用程序,但无法继续登录。它会失败,并显示一条奇怪的消息,即来自服务器的JSON响应不正确。这是我的安全配置类: import org.springframework.context.annotation.Bean; 导入org.springframework.context.annot

我正在尝试使用vaadin4spring()为我的Spring应用程序设置安全性。在作者页面上有一个明确的例子说明了如何做到这一点,但问题是这个例子使用的是Spring Boot,而我的应用程序不是。我设法运行了应用程序,但无法继续登录。它会失败,并显示一条奇怪的消息,即来自服务器的JSON响应不正确。这是我的安全配置类:

import org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.security.authentication.AuthenticationManager;
导入org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
导入org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
导入org.springframework.security.config.annotation.web.builders.HttpSecurity;
导入org.springframework.security.config.annotation.web.builders.WebSecurity;
导入org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
导入org.springframework.security.config.annotation.web.configuration.websecurityConfigureAdapter;
导入org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
导入org.springframework.security.web.authentication.RememberMeServices;
导入org.springframework.security.web.authentication.rememberme.TokenBasedMemberMeservices;
导入org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
导入org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy;
导入org.vaadin.spring.annotation.enablevadinextensions;
导入org.vaadin.spring.http.HttpService;
导入org.vaadin.spring.security.annotation.EnableVaadinSharedSecurity;
导入org.vaadin.spring.security.config.VaadinSharedSecurityConfiguration;
导入org.vaadin.spring.security.shared.vaadAuthenticationSuccessHandler;
导入org.vaadin.spring.security.shared.VaadinSessionClosingLogoutHandler;
导入org.vaadin.spring.security.shared.VaadinUrlAuthenticationSuccessHandler;
导入org.vaadin.spring.security.web.vaadin策略;
@配置
@启用Web安全性
@EnableGlobalMethodSecurity(securedEnabled=true,Prespenabled=true,proxyTargetClass=true)
@使能vaadin扩展
@启用VAADINSharedSecurity
公共类WebSecurityConfig扩展了WebSecurityConfigureAdapter{
@凌驾
public void configure(AuthenticationManagerBuilder auth)引发异常{
auth.inMemoryAuthentication().withUser(“用户”)。密码(“用户”)。角色(“用户”)和()withUser(“管理员”)
.密码(“管理员”)。角色(“管理员”);
}
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http.csrf().disable();//改用Vaadin的内置csrf保护
http.authorizeRequests()
.permitAll().antMatchers(“/vaadinServlet/HEARTBEAT/**”).permitAll().anyRequest().authenticated();
http.httpBasic().disable();
http.formLogin().disable();
//记住添加VaadinSessionClosingLogoutHandler
http.logout()
.logoutSuccessUrl(“/login?logout”).permitAll();
http.exceptionHandling().authenticationEntryPoint(新的LoginRuThenticationEntryPoint(“/login”);
//指示Spring Security使用与Vaadin4Spring相同的MemberMemberServices。还要记住密钥。
rememberMe().rememberMeServices(rememberMeServices()).key(“myAppKey”);
//指示Spring Security使用与Vaadin4Spring相同的身份验证策略
http.sessionManagement().sessionAuthenticationStrategy(sessionAuthenticationStrategy());
}
@凌驾
public void configure(WebSecurity web)引发异常{
忽略()antMatchers(“/VAADIN/**”);
}
/**
*{@linkauthenticationmanager}必须作为Vaadin4Spring的Springbean可用。
*/
@凌驾
@豆子
公共AuthenticationManager authenticationManagerBean()引发异常{
返回super.authenticationManagerBean();
}
/**
*{@link RememberMeServices}必须作为Vaadin4Spring的springbean提供。
*/
@豆子
公共记忆服务记忆服务(){
返回新的TokenBasedMemberMeservices(“myAppKey”,userDetailsService());
}
/**
*{@link SessionAuthenticationStrategy}必须作为Vaadin4Spring的springbean提供。
*/
@豆子
公共会话身份验证策略会话身份验证策略(){
返回新的SessionFixationProtectionStrategy();
}
@Bean(name=VaadinSharedSecurityConfiguration.VAADIN\u AUTHENTICATION\u SUCCESS\u HANDLER\u Bean)
公共VaadinAuthenticationSuccessHandler VaadinAuthenticationSuccessHandler(HttpService HttpService,
VAADINDIRECT策略(VAADINDIRECT策略){
返回新的VaadinUrlAuthenticationSuccessHandler(httpService,vaadinRedirectStrategy,“/”);
}
}
我通过以下方式设置我的应用程序:

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
import org.vaadin.spring.servlet.Vaadin4SpringServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletRegistration;

public class WebContextInitializer extends AbstractSecurityWebApplicationInitializer {

    public WebContextInitializer() {
        super(WebConfig.class);
    }

    @Override
    public void beforeSpringSecurityFilterChain(javax.servlet.ServletContext servletContext) {

        registerVaadinServlet(servletContext);
    }

    private void registerVaadinServlet(ServletContext servletContext) {
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("vaadinServlet", Vaadin4SpringServlet.class);
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/*");
        dispatcher.setAsyncSupported(true);
    }
}
我在这里遗漏了什么?

使用(或类似)您可以在“网络”选项卡上查看您收到的请求回复。尝试查看您从服务器返回的JSON,也许您可以找出问题所在。使用(或类似)您可以在“网络”选项卡上检查您收到的请求回复。试着看看你从服务器上得到了什么JSON,也许你可以找出问题所在。