我有网络服务网址:
http://myservice.local/aprovalanduser/?format=json&Name=India
Run Code Online (Sandbox Code Playgroud)
当我使用
http://myservice.local/aprovalanduser/?format=json&Name=India
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
org.springframework.web.client.HttpClientErrorException:401未经授权
在Web服务方法中:
method: "GET",
data: xmlData,
contentType: "application/xml",
dataType: "xml",
async: true,
crossDomain: false,
Run Code Online (Sandbox Code Playgroud)
我只为XML设置标头,如下所示:
resttemplate httpsrestTemplate.getForObject(uri, userdetails[].class)
Run Code Online (Sandbox Code Playgroud) 如何使用 Java REST 客户端传递InputStream给createParcel()方法?如何POST使用 POSTMAN调用请求?
@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
public int createParcel(InputStream is) {
int awbNo = 0;
try {
ParcelInfo parcelInfo = null;
parcelInfo = buildParcelInfo(is);
awbNo = index.incrementAndGet();
parcelInfo.setAwbNo(awbNo);
parcelInfo.setStatus("new");
parcelDataMap.put(awbNo, parcelInfo);
} catch(Exception ex) {
logger.error("Getting some exception for creating parcel : "+ex.getMessage(), ex);
}
return awbNo;
}
@GET
@Produces(MediaType.APPLICATION_XML)
public StreamingOutput getParcelInfo(@QueryParam("awbNo") int awbNo) {
ParcelInfo parcelInfo = null;
String xml = null;
parcelInfo = parcelDataMap.get(awbNo);
if (parcelInfo != null) { …Run Code Online (Sandbox Code Playgroud) 我想知道两个音频文件是否相同或者一个包含另一个。
为此,我使用音乐指纹
byte[] firstAudio = readAudioFileData("first.mp3");
byte[] secondAudio = readAudioFileData("second.mp3");
FingerprintSimilarityComputer fingerprint =
new FingerprintSimilarityComputer(firstAudio, secondAudio);
FingerprintSimilarity fingerprintSimilarity = fingerprint.getFingerprintsSimilarity();
System.out.println("clip is found at " + fingerprintSimilarity.getScore());
Run Code Online (Sandbox Code Playgroud)
要将音频转换为字节数组,我使用声音 API
public static byte[] readAudioFileData(final String filePath) {
byte[] data = null;
try {
final ByteArrayOutputStream baout = new ByteArrayOutputStream();
final File file = new File(filePath);
final AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
byte[] buffer = new byte[4096];
int c;
while ((c = audioInputStream.read(buffer, 0, buffer.length)) != -1) {
baout.write(buffer, 0, c);
} …Run Code Online (Sandbox Code Playgroud) @SuppressWarnings("SpringJavaAutowiringInspection")
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtAuthenticationEntryPoint unauthorizedHandler;
@Autowired
private UserDetailsService userDetailsService;
@Autowired
public void configureAuthentication(AuthenticationManagerBuilder
authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder.userDetailsService(userDetailsService);
}
@Bean
public JwtAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception {
return new JwtAuthenticationTokenFilter();
}
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.csrf().disable()
.exceptionHandling()
.authenticationEntryPoint(unauthorizedHandler)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/test").permitAll()
.antMatchers("/api/**").permitAll()
.anyRequest().authenticated();
httpSecurity.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个在Spring Security之前运行的自定义过滤器.我希望能够/test从过滤器和Spring Security中排除某些URL(例如)以及其他被拦截的URL (如/api/**).
当使用邮递员进行测试时localhost/test,即使我有,仍然会通过过滤器antMatchers("/test").permitAll().
如何绕过过滤器?
我想保护我的应用程序,以便任何经过admin完全身份验证的人都可以访问某些 URL,并且管理员用户也可以访问 URL,并且也完全经过身份验证。
但是现在,我无法设法找到fullyAuthenticaded() AND hasrole()一起使用的方法。
@Override
public void configure(HttpSecurity http) throws Exception {
http
.requestMatchers()
.antMatchers("/api/**", "/health")
.and()
.authorizeRequests()
.antMatchers("/health").permitAll()
.and()
.authorizeRequests()
.antMatchers("/api/get-data").fullyAuthenticated()
.and()
.authorizeRequests()
.anyRequest().hasRole("ADMIN");
}
Run Code Online (Sandbox Code Playgroud) 以下是我的示例Spring Security配置。
我希望所有人/api返回HTTP 401代码,而不是将302重定向到登录页面。
我也想保留旧网页的重定向功能。
<security:http auto-config='true' use-expressions="true" >
<security:intercept-url pattern="/api*" access="hasRole('USER')" />
<security:intercept-url pattern="/oldweb*" access="hasRole('USER')" />
<security:form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1" default-target-url="/home"/>
</security:http>
Run Code Online (Sandbox Code Playgroud) 我正在将 OAuth2 与 Spring Security 结合使用。我的身份验证管理器通过数据库配置客户端:clients.jdbc(dataSource());
一切正常,但在请求令牌时,出现异常:
2017-04-28 11:14:39.656 WARN 1200 --- [io-8096-exec-10] o.s.s.o.p.c.JdbcClientDetailsService : Could not decode JSON for additional information: BaseClientDetails [clientId=myclientid, clientSecret=mysecret, scope=[myscope], resourceIds=[], authorizedGrantTypes=[authorization_code, refresh_token], registeredRedirectUris=null, authorities=[], accessTokenValiditySeconds=36000, refreshTokenValiditySeconds=36000, additionalInformation={}]
Run Code Online (Sandbox Code Playgroud)
有踪迹:
org.codehaus.jackson.JsonParseException: Unexpected character ('a' (code 97)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') at [Source: java.io.StringReader@557a138f; line: 1, column: 2]
...
...
Run Code Online (Sandbox Code Playgroud)
其中表中的列additional_information( varchar(4096))client_details是该条目的“asdf”。
additional_information我还尝试更改from的类型String,Map<String, Object>并通过使用键“info”将其放入地图中来插入字符串。之后,我得到相同的错误,但跟踪不同:
org.codehaus.jackson.JsonParseException: Unrecognized token …Run Code Online (Sandbox Code Playgroud) 这是我的 webapp 的 Spring Security 配置
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", LOGIN, "/webjars/**").permitAll()
.antMatchers(CONFIGURATION).hasAuthority(Authorities.AUTHORITY_SOLMAN72_EXPORT_ENABLED.getKey())
.antMatchers("/api/**").hasAuthority(Authorities.AUTHORITY_SOLMAN72_EXPORT_ENABLED.getKey())
.and()
.formLogin()
.loginPage(LOGIN)
.and()
.addFilterBefore(oAuth2ClientAuthenticationProcessingFilter, BasicAuthenticationFilter.class);
}
Run Code Online (Sandbox Code Playgroud)
目前,服务器正在将LOGIN每个没有正确凭据的请求重定向到该页面。
我只想将LOGIN未经授权的请求重定向到页面CONFIGURATION,而未经授权的请求/api/**应以 403 回答。
实现这一目标的好方法是什么?
我搜索了有关 Apache Camel 支持新的 Spring Boot 3 的信息,但没有结果。
我的问题是:Apache Camel 宣布支持 Spring Boot 3 了吗?
我能找到的只是 Apache Camel 仅适用于版本 <3.0 ...
Spring Boot从2.7.6升级到3.0.0后,公共API无法访问。
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.csrf(CsrfConfigurer::disable)
.authorizeHttpRequests(requests -> requests
.anyRequest().authenticated())
.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
.build();
}
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return web -> web
.ignoring()
.requestMatchers(CorsUtils::isPreFlightRequest)
.requestMatchers("/actuator/**", "/graphiql/**", "/voyager/**", "/vendor/**", "/rest/**",
"/swagger-ui/**", "/v3/api-docs/**");
}
Run Code Online (Sandbox Code Playgroud) spring ×6
java ×4
spring-boot ×4
apache-camel ×1
fingerprint ×1
jax-rs ×1
musicg ×1
oauth-2.0 ×1
postman ×1
rest ×1
web-services ×1