我试图找到一种方法来撤销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
我想使用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) 我有以下配置文件,它与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) 当我在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.
我虽然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.
我错过了什么?
我正在尝试按照此主题(http://osdir.com/ml/dev-felix-apache/2009-05/msg00051.html)中的说明禁用felix中的文件系统包缓存.我无法在网上找到具体的例子.
有人可以帮我这个吗?这真的有效吗?
提前致谢.
克劳斯.
我们的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)
如何修复此问题以便加载和打印所有属性?
我尝试复制在以下位置描述的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) 我认为 GET 不应该有主体。但在elasticsearch的上下文中,我不断看到这种查询(例如参见此处):
curl -XGET localhost:9200/test/_msearch --data-binary @requests; echo
Run Code Online (Sandbox Code Playgroud)
在这种情况下,二进制数据是如何发送的?有人可以解释一下发生了什么以及它是如何工作的吗?我首先以为它被转换为 POST,但是,我在 Elasticsearch 前面放置了一个代理,发现curl确实发送了一个 GET。尽管我既无法在标头中找到数据,也无法在参数中找到数据,也无法在正文中找到数据。所以看来我的代理也对这个请求感到困惑。
但是当我直接对elasticsearch执行请求时,它工作得很好。是什么赋予了?
如何使以下示例有效?
Boolean persistence = Arrays.asList(new boolean[]{true, false})
.stream()
.filter(b -> b)
.findFirst().orElse(false);
Run Code Online (Sandbox Code Playgroud)
当我更换它工作得很好boolean用Boolean.
spring-boot ×3
java ×2
angularjs ×1
apache-felix ×1
apache-kafka ×1
caching ×1
curl ×1
fileappender ×1
http ×1
java-8 ×1
javascript ×1
lambda ×1
logback ×1
memcached ×1
oauth-2.0 ×1
osgi ×1
spring ×1
spring-cloud ×1
spymemcached ×1