我想使用Spring Security进行JWT身份验证.但它带有默认身份验证.我试图禁用它,但是这样做的旧方法 - 禁用它application.properties- 在2.0中已弃用.
这是我试过的:
@Configuration
public class StackWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().disable();
// http.authorizeRequests().anyRequest().permitAll(); // Also doesn't work.
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能简单地禁用基本安全性?
更新
可能很高兴知道我不使用web mvc而是web flux.
spring-security spring-boot spring-security-rest spring-webflux
我正在为Angular 5应用程序创建API.我想使用JWT进行身份验证.
我想使用spring security提供的功能,这样我就可以轻松地使用角色了.
我设法禁用基本身份验证.但是在使用时http.authorizeExchange().anyExchange().authenticated();我仍然会收到登录提示.
我想给403而不是提示.所以用"事物"(它是一个过滤器吗?)覆盖登录提示,检查Authorization标记的标题.
我只想在将返回JWT令牌的控制器中进行登录.但是我应该用什么Spring安全bean来检查用户凭据?我可以构建自己的服务和存储库,但我想尽可能使用spring security提供的功能.
这个问题的简短版本就是:
我如何定制spring security的身份验证?
我必须创建什么豆?
我在哪里放置配置?(我现在有一个豆子SecurityWebFilterChain)
我能找到的关于具有spring security的webflux身份验证的唯一文档是:https://docs.spring.io/spring-security/site/docs/5.0.0.BUILD-SNAPSHOT/reference/htmlsingle/#jc-webflux
我想从另一个包访问主包,但这是不可能的,因为主文件不在目录中.我已经尝试将主文件放在一个目录中,但是当我尝试导入它时,我收到此错误:
import "../main" is a program, not an importable package
我想要这个的原因是因为我有一个tcp服务器和一个协同工作的网络服务器.Web服务器可以通过主程序包获取tcp服务器,tcp服务器可以通过主程序包获取Web服务器.
我已经让它与webserver和tcpserver相互阅读(中间没有主程序包),但是我想在一个地方保留应用程序的某些部分.
是我想要的东西(通过主包)?或者它只是愚蠢.
我正在尝试在Webflux中使用bean验证.这是我到目前为止:
@PostMapping("contact")
fun create(@RequestBody @Valid contact: Mono<Contact>) : Mono<Contact> {
return contact.flatMap { contactRepository.save(it) }
.doOnError{ Error("test") }
}
Run Code Online (Sandbox Code Playgroud)
验证不起作用......我希望Error("test")会显示...
有人有一个有效的例子(Java或Kotlin)吗?
UPDATE
这是一个存储库,因此可以复制:https://github.com/jwz104/webflux-validation-test
请求:
curl --request POST \
--url http://localhost:8080/tickets \
--header 'content-type: application/json' \
--data '{
"email": "",
"name": "",
"message": ""
}'
Run Code Online (Sandbox Code Playgroud)
将联系人重命名为故障单,但一切都仍然相同.
我想@Value在一个属性上使用,但我总是得到0(在int上).
但是在构造函数参数上它可以工作.
例:
@Component
public class FtpServer {
@Value("${ftp.port}")
private int port;
public FtpServer(@Value("${ftp.port}") int port)
{
System.out.println(port); // 21, loaded from the application.properties.
System.out.println(this.port); // 0???
}
}
Run Code Online (Sandbox Code Playgroud)
该对象是spring管理的,否则构造函数参数将不起作用.
有谁知道导致这种奇怪行为的原因是什么?
java spring dependency-injection property-injection spring-boot
我想获取.pub文件内容的公钥.这是一个.pub文件内容(生成ssh-keygen)的示例:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBPL2s+25Ank3zS6iHUoVk0tS63dZM0LzAaniiDon0tdWwq4vcL4+fV8BsAEcpMeijS92JhDDc9FccXlHbdDcmd6c4ITOt9h9xxhIefGsi1FTVJ/EjVtbqF5m0bu7ruIMGvuP1p5s004roHx9y0UdHvD/yNWLISMhy4nio6jLailIj3FS53Emj1WRNsOrpja3LzPXzhuuj6YnD9yfByT7iGZipxkmleaXrknChPClLI9uhcqtAzBLdd0NVTJLOt/3+d1cSNwdBw9e53wJvpEmH+P8UOZd+oV/y7cHIej4jQpBXVvpJR1Yaluh5RuxY90B0hSescUAj4g/3HVPpR/gE7op6i9Ab//0iXF15uWGlGzipI4lA2/wYEtv8swTjmdCTMNcTDw/1huTDEzZjghIKVpskHde/Lj416c7eSByLqsMg2OhlZGChKznpIjhuNRXz93DwqKuIKvJKSnhqaJDxmDGfG7nlQ/eTwGeAZ6VR50yMPiRTIpuYd767+Nsg486z7p0pnKoBlL6ffTbfeolUX2b6Nb9ZIOxJdpCSNTQRKQ50p4Y3S580cUM1Y2EfjlfIQG1JdmTQYB75AZXi/cB2PvScmF0bXRoj7iHg4lCnSUvRprWA0xbwzCW/wjNqw6MyRX42FFlvSRrmfaxGZxKYbmk3TzBv+Fp+CADPqQm3OQ== test@test.com
Run Code Online (Sandbox Code Playgroud)
如果我是对的,这不是公钥,但可以从此字符串中获取公钥.
这个答案给出了我的问题
的答案/sf/answers/1357126221/
但答案似乎不起作用.我得到一个例外:
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format
Run Code Online (Sandbox Code Playgroud)
在查看答案的评论时,我不是唯一有问题的人...
我该如何修复异常?或者是否有另一种方法从字符串中获取公钥?
使用命令行连接到"新"SSH服务器时,将显示指纹:
无法建立主机'test.com(0.0.0.0)'的真实性.
ECDSA密钥指纹为SHA256:566gJgmcB43EXimrT0exEffxSd3xc7RBS6EPx1XZwYc.
您确定要继续连接(是/否)吗?
我知道指纹是公钥的SHA256哈希的Base64字符串.
我知道如何使用以下方法生成此指纹RSAPublicKey:
RSAPublicKey publicKey = ...;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);
dataOutputStream.writeInt("ssh-rsa".getBytes().length);
dataOutputStream.write("ssh-rsa".getBytes());
dataOutputStream.writeInt(publicKey.getPublicExponent().toByteArray().length);
dataOutputStream.write(publicKey.getPublicExponent().toByteArray());
dataOutputStream.writeInt(publicKey.getModulus().toByteArray().length);
dataOutputStream.write(publicKey.getModulus().toByteArray());
MessageDigest digest = MessageDigest.getInstance("SHA256");
byte[] result = digest.digest(byteArrayOutputStream.toByteArray());
String fingerprint = Base64.getEncoder().encodeToString(result);
Run Code Online (Sandbox Code Playgroud)
但我怎么能这样做BCECPublicKey呢?
更新
我发现它BCECPublicKey根本不相似RSAPublicKey.我从来不知道SSH服务器公钥是ECDSA,客户端公钥是RSA.
字节结构的方式也是不同的.RSA公钥以头(ssh-rsa)开头.标头长度可以从前4个字节(readInt())中读取.但是,当我使用ECDSA执行此操作时,长度是表示标题的长度...
除了回答
要复制粘贴的东西:
BCECPublicKey publicKey = ...;
byte[] point = SubjectPublicKeyInfo.getInstance(ASN1Sequence.getInstance(publicKey.getEncoded())).getPublicKeyData().getOctets();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);
dataOutputStream.writeInt("ecdsa-sha2-nistp256".getBytes().length);
dataOutputStream.write("ecdsa-sha2-nistp256".getBytes());
dataOutputStream.writeInt("nistp256".getBytes().length);
dataOutputStream.write("nistp256".getBytes());
dataOutputStream.writeInt(point.length);
dataOutputStream.write(point); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在spring webflux中进行应用。但是我在文档中找不到很多东西。
我有一个Webfilter,我想在响应周围添加包装器。示例:
在以下情况下回复:
{
"id": 1,
"name": "asdf"
}
Run Code Online (Sandbox Code Playgroud)
之后的回应:
{
"status": "success",
"data": {
"id": 1,
"name": "asdf"
}
}
Run Code Online (Sandbox Code Playgroud)
这是当前的WebFilter:
@Component
public class ResponseWrapperFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {
// Add wrapper to the response content...
return webFilterChain.filter(serverWebExchange);
}
}
Run Code Online (Sandbox Code Playgroud)
但是我找不到获取或编辑响应正文的方法。
如何更改中的响应输出WebFilter?
在Angular Material文档中的snackbar示例中,操作设置为undo.我也想要一个撤销零食吧.
但是有一个问题.afterDismissed单击"关闭"按钮时会触发该事件,但也会在持续时间过后触发该事件.因此,我的表单清除按钮将清除表单并显示小吃栏,但在5秒后输入返回.
有没有办法检查撤消按钮是否调用了解雇?我不想使用自定义Snackbar,因为我必须重新制作零食吧设计......
我试图获取服务器的公钥.这是我试过的:
val serverKey = sshClient.connect("dyn mem", "localhost", "2222")
.verify()
.getSession()
.getKex()
.getServerKey()
Run Code Online (Sandbox Code Playgroud)
问题是得到的结果getServerKey()是null ...
如何使用Apache SSHD客户端获取SSH服务器的公钥.
java ×5
spring ×4
ssh ×3
spring-boot ×2
angular ×1
apache-mina ×1
bouncycastle ×1
encryption ×1
go ×1
import ×1
kotlin ×1
openssh ×1
package ×1
public-key ×1
rsa ×1
snackbar ×1
sshd ×1