小编Son*_*oku的帖子

在WebLogic 12.2.1上部署Spring Boot Websocket/STOMP应用程序时出错

我正在创建一个Spring Boot REST API,它利用WebSockets/STOMP使用SockJS将消息发送到Angular前端.我已经花了很大的力气让应用程序在WebLogic 12.2.1C中部署而不使用web.xml.我似乎很接近,但我正在使用的Spring Boot Web Socket实现存在问题.我想使用Spring Boot的实现,而不是WebLogics.当我尝试在WebLogic中部署war文件时,出现以下错误:

 <Could not load user defined filter in web.xml: weblogic.websocket.tyrus.TyrusServletFilter.
java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to org.glassfish.tyrus.server.TyrusServerContainer
        at weblogic.websocket.tyrus.TyrusServletFilter.init(TyrusServletFilter.java:76)
        at weblogic.servlet.internal.FilterManager$FilterInitAction.run(FilterManager.java:400)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
        at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:196)
        at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
        at weblogic.servlet.internal.FilterManager.initFilter(FilterManager.java:130)
        at weblogic.servlet.internal.FilterManager.loadFilter(FilterManager.java:92)
        at weblogic.servlet.internal.FilterManager.preloadFilters(FilterManager.java:72)
        at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1917)
        at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3063)
        at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1830)
        at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:875)
        at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360)
        at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356)
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
Run Code Online (Sandbox Code Playgroud)

下面是我的pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <spring.version>4.2.3.RELEASE</spring.version>
    <log4j.version>2.4.1</log4j.version>
    <apacheds.server.jndi.version>1.5.5</apacheds.server.jndi.version>
    <dao.hibernate.version>1.2.0</dao.hibernate.version>
    <commons.lang3.version>3.3.2</commons.lang3.version>
    <oracle.version>11.2.0</oracle.version>
    <hibernate.core.version>4.3.8.Final</hibernate.core.version> …
Run Code Online (Sandbox Code Playgroud)

weblogic12c spring-boot

7
推荐指数
0
解决办法
6028
查看次数

@DataMongoTest正在创建一个null MongoTemplate

我一直在尝试按照以下链接中的说明尝试添加自动配置的嵌入式MongoDB实例以进行黄瓜集成测试.这是目前无法正常工作,因为我不断获得一个null MongoTemplate.我以为@DataMongoTest会自动配置"@Autowired private MongoTemplate mongoTemplate;" 这不是这种情况吗?以下是我的代码:

mongoTemplate.save(doc,collection); 抛出nullpointer异常.

@SpringBootTest(classes = AppCommentApiApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@DataMongoTest
public abstract class SpringIntegrationTest {

    @Value("${local.server.port}")
    public int port;

    @Autowired
    private MongoTemplate mongoTemplate;

    protected void importJSON(String collection, String file) {
        try {
            for (String line : FileUtils.readLines(new File(file), "utf8")) {
                Document doc = Document.parse(line);
                mongoTemplate.save(doc, collection);
            }
        } catch (IOException e) {
            throw new RuntimeException("Could not import file: " + file, e);
        }
    }

}


@RunWith(Cucumber.class)
@CucumberOptions(format = "pretty",
                 features = "src/test/resources/features",
                 glue = "com.app.comment.cucumber") …
Run Code Online (Sandbox Code Playgroud)

spring mongodb spring-data-mongodb spring-boot spring-boot-test

7
推荐指数
1
解决办法
1971
查看次数

使用Spring Security OAuth 2.0和JWT进行移动原生社交注册

我使用Spring Security OAuth 2.0和JWT为我的身份验证服务器实现了密码授予.我通过扩展AuthorizationServerConfigurerAdapter来创建服务器.我能够给服务器一个用户名/密码并获得一个JWT令牌.我使用ResourceConfiguration扩展其他服务上的ResourceServerConfigurerAdapter类,以便在进行Web服务调用时验证JWT.贴在下面是我的代码.

我想让我的Native Mobile应用程序能够使用Facebook,Gmail,Linked等登录...我想按照所附文章中的步骤操作:

https://ole.michelsen.dk/blog/social-signin-spa-jwt-server.html

  1. 用户在Mobile端进行OAuth舞蹈,并向我发送他们正在使用的社交服务的访问令牌.
  2. 我收到了访问令牌,并使用它来呼叫相应的社交服务.
  3. 如果令牌有效,则用户无法登录,则会引发错误.
  4. 如果令牌有效,我从社交服务获取用户详细信息并使用它在我的数据存储中创建一个"社交用户",该用户将绑定到现有或新的系统用户.
  5. 一旦使用社交用户创建系统用户,或者社交用户与现有系统用户绑定,JWT令牌就会被发送回移动应用程序.
  6. 此JWT令牌应类似于Spring Security OAuth 2.0密码授予流创建的JWT令牌,并且在授权用户时应由我的ResourceServerConfiguration接受.

我在网上搜索了符合我标准的解决方案,但我找不到任何解决方案.我的要求合理吗?是否有更简单的方法,允许用户通过用户名/密码和社交媒体身份验证登录,同时获取JWT令牌.我发现的一个例子使用OAuth2ClientAuthenticationProcessingFilter来执行上面提到的逻辑,但我不知道OAuth2ClientAuthenticationProcessingFilter是如何工作的,并且找不到任何文档.如果某人必须使用类似的技术堆栈实现类似的要求,请告诉我您用于实施此解决方案的技术.

在身份验证服务器上:

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;
    @Autowired
    private UserDetailsService userDetailsService;

    @Value("${clientId}")
    private String clientId;

    @Value("${clientSecret}")
    private String clientSecret;

    @Value("${jwtSigningKey}")
    private String jwtSigningKey;

    @Value("${accessTokenValiditySeconds}")
    private String accessTokenValiditySeconds;

    @Value("${refreshTokenValiditySeconds}")
    private String refreshTokenValiditySeconds;

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public JwtAccessTokenConverter accessTokenConverter(){
        JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();
        accessTokenConverter.setSigningKey(jwtSigningKey);
        return accessTokenConverter;
    }

    @Bean
    public TokenStore tokenStore() …
Run Code Online (Sandbox Code Playgroud)

single-sign-on jwt spring-boot spring-security-oauth2 spring-security-rest

6
推荐指数
0
解决办法
187
查看次数

Spring Web Flux和Reactor中的Map与FlatMap

我一直在使用Spring Boot 2.0.1及其Webflux库来研究示例反应式Web api。我一直在网上查看示例以尝试构建它,但是我在两件事上感到困惑。以下是我有两个问题。

1)如何返回响应实体的流量,当我尝试时出现错误,提示只能返回单个响应实体。下面是我当前的代码。

@Service
public class MovieServiceImpl implements MovieService {

    @Autowired
    private MovieRepository movieRepository;

    @Override
    public Flux<Movie> list(){
        return movieRepository.findAll();
    }
}

@RestController
public class MovieRestController {

    @Autowired
    private MovieService movieService;

    @GetMapping(value = "/movies")
    public Flux<Movie> list() {

        return movieService.list();
    }
}
Run Code Online (Sandbox Code Playgroud)

2)更新对象时,我使用flatMap更新保存在Mongo中的对象,然后使用Map将其转换为响应实体。我的问题是为什么我在这里使用flatMap而不是map?我从在线示例中获取了此代码,但是没有示例说明了flatMap的用法。我想了解为什么在这里使用它。下面是代码。

@Service
public class MovieServiceImpl implements MovieService {

    @Autowired
    private MovieRepository movieRepository;

    @Override
    public Mono<Movie> update(String id, MovieRequest movieRequest) {

       return movieRepository.findById(id).flatMap(existingMovie -> {

           if(movieRequest.getDescription() != null){
               existingMovie.setDescription(movieRequest.getDescription());
           }
           if(movieRequest.getRating() != null){
               existingMovie.setRating(movieRequest.getRating());
           }
           if(movieRequest.getTitle() != …
Run Code Online (Sandbox Code Playgroud)

spring-webflux

0
推荐指数
2
解决办法
4940
查看次数