小编Kla*_*aus的帖子

撤销JWT Oauth2刷新令牌

我试图找到一种方法来撤销Oauth2 JWT刷新令牌与vanilla Spring实现和JwtTokenStore.

首先:有人可以确认没有类似于/ oauth/token的API允许我撤销刷新令牌吗?

我想添加一个自定义API,它将沿着以下行删除刷新令牌:

OAuth2RefreshToken oauth2RefreshToken=tokenStore.readRefreshToken(refreshToken);
tokenStore.removeRefreshToken(oauth2RefreshToken);
Run Code Online (Sandbox Code Playgroud)

现在,看着JwtTokenStore,我注意到它使用了ApprovalStore.所以我继续向我的JwtTokenStore提供了一个InMemoryApprovalStore.我的JwtTokenStore实例化看起来如下:

@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    converter.setSigningKey("123456");
    return converter;
}

@Bean
public JwtTokenStore getTokenStore(){
    tokenStore= new JwtTokenStore(jwtTokenEnhancer());
    tokenStore.setApprovalStore(new InMemoryApprovalStore());
    tokenStore.setTokenEnhancer(jwtTokenEnhancer());
    return tokenStore;
};
Run Code Online (Sandbox Code Playgroud)

结果:没有InMemoryApprovalStore,我可以对用户进行身份验证并刷新令牌而不会出现问题.但是,只要我将InMemoryApprovalStore添加到令牌存储,我就会收到以下错误消息:

{"error":"invalid_grant","error_description":"Invalid refresh token: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NDUwMjQ2MTcsInVzZXJfbmFtZSI6IjYzZjIyYjZlLWU5MGUtNDFjYS1iYzJlLTBmZTgzNmY3MTQ2NyIsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1VTRVIiXSwianRpIjoiMjgwMDgwNWQtMjk1Zi00ZDQzLWI2NTYtMDNlZWYwMWFkMjg0IiwiY2xpZW50X2lkIjoid2ViLWNsaWVudCIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInRydXN0Il19.BPC0HqLYjWGM0IFjvsUGGKQ9dyIXSXwMhraCVFIxD0U"}
Run Code Online (Sandbox Code Playgroud)

因此,我的第二个问题是撤销刷新令牌的正确方法是什么?

编辑:我发现以下线程表明ApprovalStore确实是撤销JWT令牌的方法.我现在只需要找出如何正确使用它们.

spring-security oauth-2.0 spring-boot spring-security-oauth2

13
推荐指数
1
解决办法
6095
查看次数

将安全的Grafana嵌入到Web应用程序中

我想使用AngularJS将Grafana嵌入到我的Web应用程序中.目标是,当用户在我的应用程序中时,她应该能够单击按钮并加载Grafana UI.就其本身而言,这是一项简单的任务.为此,我有apache代理Grafana并返回任何必要的CORS头.apache反向代理配置如下:

    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
    Header always set Access-Control-Max-Age "1000"
    Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, Authorization, accept, client-security-token"


    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
    RewriteCond %{REQUEST_METHOD} OPTIONS
    ProxyPass / http://localhost:3000/
Run Code Online (Sandbox Code Playgroud)

当没有安全措施时,所有工作都完美无缺.以下代码是一个简单的HTML/Javascript,显示了我在做什么:

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="http://requirejs.org/docs/release/2.1.11/minified/require.js"></script>
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<body >
<script>
    var app = angular.module('myApp', []);

    app.controller('MainCtrl', function ($scope, $http, $sce) {

    $scope.trustSrc = function(src) {
            console.log(src);
            return $sce.trustAsHtml(src);
    }

    $http({
            method : 'GET',
            url …
Run Code Online (Sandbox Code Playgroud)

javascript basic-authentication angularjs

13
推荐指数
1
解决办法
7214
查看次数

Logback AyncAppender不打印文件和行号

我有以下配置文件,它与Logback手册中的标准示例非常相似.唯一的区别是添加[%F:%L].虽然一切正常,但%F和%L不起作用.如果我删除异步appender并使用文件appender直接登录,一切都很好.

谁能解释一下发生了什么?以及如何打印文件名和行号应该是这两个参数?

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>myapp.log</file>
    <encoder><pattern>%logger{35} - [%F:%L] - %msg%n</pattern></encoder>
    </appender>
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
         <appender-ref ref="FILE" />
    </appender>
   <root level="DEBUG"><appender-ref ref="ASYNC" /></root>
 </configuration>
Run Code Online (Sandbox Code Playgroud)

logback fileappender

11
推荐指数
1
解决办法
5197
查看次数

Eureka:如何禁用/配置对等复制?

当我在8761端口上运行Eureka时,一切都很好.配置服务器可以毫无问题地注册到Eureka.然而,当我将eureka端口更改为7001时,事情就会停止工作,我似乎无法弄清楚如何修复它们.

问题似乎围绕着Eureka无法找到运行的对等节点:http:// localhost:8761/eureka.例外是:

2015-07-05 08:00:47.301 ERROR 4140 --- [egister-process] 
c.netflix.eureka.cluster.PeerEurekaNode  : PeerEurekaNode: 
http://localhost:8761/eureka/apps/: CONFIGSERVER/localhost:Register
Run Code Online (Sandbox Code Playgroud)

确实,当Eureka开始时,它说:添加副本节点:http:// localhost:8761/eureka /.因此,似乎假定副本节点在8761运行.

有没有办法禁用Eureka寻找副本节点?或者我如何控制复制品应该发生的时间和地点?我查看了EurekaServerConfig类(http://netflix.github.io/eureka/javadoc/eureka-core/index.html),但我找不到任何朝这个方向发展的内容.

这是Spring Cloud 1.0.2.RELEASE.

spring-boot spring-cloud netflix-eureka

8
推荐指数
1
解决办法
7689
查看次数

Spymemcached和连接失败

我虽然Spymemcached确实尝试在此连接丢失时重新建立与服务器的连接.

但我看到了不同的东西; 想知道我误解了什么或者我做错了什么.以下是一些示例代码:

 MemcachedClient c=new MemcachedClient(AddrUtil.getAddresses("server:11211"));
while(true)
try {
    System.out.println(c.get("hatsts"));
    Thread.sleep(10000);
} catch(Exception e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

它最初运行没有问题.然后我拉网络插头.随后,客户端检测到网络故障并抛出以下异常:

net.spy.memcached.OperationTimeoutException: Timeout waiting for value
Run Code Online (Sandbox Code Playgroud)

但是,当我重新建立网络时,客户端无法恢复并继续抛出异常; 甚至在5分钟后.我试过SpyMemcached 2.10.6和2.9.0.

我错过了什么?

java memcached spymemcached

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

在Apache Felix中禁用缓存

我正在尝试按照此主题(http://osdir.com/ml/dev-felix-apache/2009-05/msg00051.html)中的说明禁用felix中的文件系统包缓存.我无法在网上找到具体的例子.

有人可以帮我这个吗?这真的有效吗?

提前致谢.

克劳斯.

java caching osgi apache-felix

6
推荐指数
1
解决办法
3463
查看次数

转储Spring引导配置

我们的Ops人员希望在应用程序启动时将Spring启动配置(即所有属性)转储到日志文件中.我假设这可以通过使用注释@ConfigurationProperties注入属性并打印它们来完成.

问题是是否有更好的或内置的机制来实现这一目标.

鉴于此外似乎没有内置的解决方案,我试着自己做饭.这是我想出的:

@Component
public class ConfigurationDumper {


    @Autowired
    public void init(Environment env){
        log.info("{}",env);
    }

}
Run Code Online (Sandbox Code Playgroud)

这样做的挑战是它不会打印我的application.yml中的变量.相反,这是我得到的:

StandardServletEnvironment 
{
    activeProfiles=[],
    defaultProfiles=[default],
    propertySources=[
        servletConfigInitParams,
        servletContextInitParams,
        systemProperties,
        systemEnvironment,
        random,
        applicationConfig: [classpath: /application.yml]
    ]
}
Run Code Online (Sandbox Code Playgroud)

如何修复此问题以便加载和打印所有属性?

configuration spring spring-boot

5
推荐指数
1
解决办法
2998
查看次数

Kafka身份验证生产者无法连接生产者

我尝试复制在以下位置描述的SASL_PLAIN或SASL_SSL身份验证:http ://docs.confluent.io/3.0.0/kafka/sasl.html#sasl-configuration-for-kafka-brokers

在config / server.properties中,我添加了以下4行:

listeners=SASL_SSL://localhost:9092
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
Run Code Online (Sandbox Code Playgroud)

在config / producer.properties中,添加了以下两行:

security.protocol=SASL_SSL
sasl.mechanism=PLAIN
Run Code Online (Sandbox Code Playgroud)

然后在服务器终端中设置以下环境变量:

KAFKA_OPTS=/home/kafka/kafka_server_jaas.conf
Run Code Online (Sandbox Code Playgroud)

该文件具有以下内容:

KafkaServer {
   org.apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin-secret"
   user_admin="admin-secret"
   user_alice="alice-secret";
};
Run Code Online (Sandbox Code Playgroud)

在生产者终端中,我定义以下env变量:

KAFKA_OPTS=/home/kafka/kafka_client_jaas.conf
Run Code Online (Sandbox Code Playgroud)

并且此文件具有以下内容:

KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="alice"
  password="alice-dsecret";
};
Run Code Online (Sandbox Code Playgroud)

我使用以下命令启动服务器:

./bin/kafka-server-start.sh   config/server.properties
Run Code Online (Sandbox Code Playgroud)

和生产者一起使用以下命令:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
Run Code Online (Sandbox Code Playgroud)

两者开始都没有问题。但是,一旦我在生产者控制台上键入内容,我就会得到以下消息,该消息一直在滚动:

WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
WARN Bootstrap broker localhost:9092 disconnected (org.apache.kafka.clients.NetworkClient)
WARN Bootstrap broker localhost:9092 …
Run Code Online (Sandbox Code Playgroud)

authentication apache-kafka

5
推荐指数
1
解决办法
1万
查看次数

使用 CURL GET 发送数据

我认为 GET 不应该有主体。但在elasticsearch的上下文中,我不断看到这种查询(例如参见此处):

curl -XGET localhost:9200/test/_msearch --data-binary @requests; echo
Run Code Online (Sandbox Code Playgroud)

在这种情况下,二进制数据是如何发送的?有人可以解释一下发生了什么以及它是如何工作的吗?我首先以为它被转换为 POST,但是,我在 Elasticsearch 前面放置了一个代理,发现curl确实发送了一个 GET。尽管我既无法在标头中找到数据,也无法在参数中找到数据,也无法在正文中找到数据。所以看来我的代理也对这个请求感到困惑。

但是当我直接对elasticsearch执行请求时,它工作得很好。是什么赋予了?

curl http elasticsearch

5
推荐指数
1
解决办法
9562
查看次数

Java 8 Lambda on Primitive Boolean

如何使以下示例有效?

Boolean persistence =  Arrays.asList(new boolean[]{true, false})
                             .stream()
                             .filter(b -> b)
                             .findFirst().orElse(false); 
Run Code Online (Sandbox Code Playgroud)

当我更换它工作得很好booleanBoolean.

lambda java-8

3
推荐指数
1
解决办法
312
查看次数