implementation 'org.springframework.boot:spring-boot-starter-data-rest'
implementation 'org.springframework.boot:spring-boot-starter-hateoas'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-security'
@Configuration @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(daoAuthenticationProvider()); } @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .addFilter(new AuthorizationFilter(authenticationManager(), userRepository)) .authorizeRequests() // configure access rules .antMatchers("/browser/index.html**").permitAll() .anyRequest().authenticated(); http.headers().frameOptions().disable(); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/browser/index.html"); } }
public class AuthorizationFilter extends BasicAuthenticationFilter { public static final String HEADER_STRING_REMOTE_USER = "Remote-User"; /** * Security pipe line is composed of different filters so we need to delegate to the rest of the pipeline. * * @param request * @param response * @param chain * @throws IOException * @throws ServletException */ @Override protected void doFilterInternal (HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { // Read the Authorization header, where we get the userId String userId = request.getHeader(HEADER_STRING_REMOTE_USER); // If header does not contain userId or is null delegate to Spring impl and exit if (userId == null) { chain.doFilter(request, response); return; } // If userId is present, try grab user principal from database and perform authorization Authentication authentication = getUsernamePasswordAuthentication(userId); SecurityContextHolder.getContext().setAuthentication(authentication); // Continue filter execution chain.doFilter(request, response); } private Authentication getUsernamePasswordAuthentication (String userId) { // Search in the DB if we find the user by userId // If so, then grab user details and create spring auth token using username, pass, authorities/roles if (userId != null) { List user = userRepository.findByUserId(userId); UserPrincipal principal = new UserPrincipal(user.get(0)); UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(principal, null, principal.getAuthorities()); return auth; } return null; } }
有没有人遇到过类似的问题...
我最后做的是使用spring活动配置文件进行管理。
有关spring profiles的更多信息,请参阅链接
我为“secure”配置文件启用了Spring Security,为“dev”配置文件禁用了它。因此在“dev”配置文件中,HAL浏览器可以在没有任何安全中断的情况下工作。
@Configuration
@EnableWebSecurity
@Profile("secure")
public class WebSecurityConfigEnable extends WebSecurityConfigurerAdapter {
@Autowired
UserPrincipalDetailsService userPrincipalDetailsService;
private UserRepository userRepository;
@Value("${spring.profiles.active}")
private String activeProfile;
public WebSecurityConfigEnable (UserPrincipalDetailsService
userPrincipalDetailsService, UserRepository userRepository) {
this.userPrincipalDetailsService = userPrincipalDetailsService;
this.userRepository = userRepository;
}
@Override
protected void configure (AuthenticationManagerBuilder auth) throws
Exception {
auth.authenticationProvider(daoAuthenticationProvider());
}
@Override
protected void configure (HttpSecurity http) throws Exception {
http
.cors().configurationSource(request -> new
CorsConfiguration().applyPermitDefaultValues())
.and()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilter(new AuthorizationFilter(authenticationManager(),
userRepository, activeProfile))
.authorizeRequests()
// configure access rules
.anyRequest().authenticated();
}
@Bean
DaoAuthenticationProvider daoAuthenticationProvider () {
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
daoAuthenticationProvider.setPasswordEncoder(this.passwordEncoder());
daoAuthenticationProvider.setUserDetailsService(this.userPrincipalDetailsService);
return daoAuthenticationProvider;
}
@Bean
PasswordEncoder passwordEncoder () {
return new BCryptPasswordEncoder();
}
}
java -jar -Dspring.profiles.active=dev build\libs\springApp-0.1.1-SNAPSHOT.jar
我已经实现了一个使用基本身份验证(使用Spring Security性)的web服务器。 我在访问URL时禁用了默认身份验证入口点(它只返回401,而不是用www身份验证标头响应401),目的是防止浏览器显示身份验证弹出窗口。 我能够用javascript代码和命令行工具(如curl)连接到服务器,但是当我用浏览器(chrome)测试它时 <代码>curl-v-u用户:密码本地主机:8080/用户
当我们出于开发目的或其他需要尝试访问SSL安全URL(或站点)时,当浏览器找不到我们正在访问的特定站点的有效SSL证书时,它会显示以下错误。 在WINDOWS OS中,它显示PROCEED选项,但在MAC OS中不显示此选项。 那么,如何简单地跳过MAC OS或其他操作系统中浏览器的SSL检查呢。
你好,我在JavaFX应用程序中遇到了一个很大的问题,当所有浏览器窗口关闭时,会终止java进程。我试图处理stage.setonhidding或.setoncloseRequest,终止所有正在运行的线程,并在处理程序主体中执行platform.exit,但没有成功。首先,当我关闭浏览器时,没有调用任何处理程序setonHidding和setOnCloseRequest。此外,设置platfor
问题内容: 我正在尝试在我的网站上部署Java applet。我还需要签名,因为我需要访问剪贴板。我遵循了所有可以找到但没有成功的签名教程。到目前为止,这是我所做的: 在NetBeans中编写了一个applet。它在applet查看器中运行良好。 从中制作一个.jar文件。 通过执行以下操作创建证书: 像这样用jarsigner签名: 制作了一个包含以下内容的html文件: 当我打开该html文件
我制作了一个Java桌面应用程序,可以创建多个交互式窗口。我想向人们展示的不是压缩文件夹存档的下载链接,而是一个在他们打开我的网站后立即运行的程序。 在NetBeans编程环境中为这个项目启用Java Web Start,让我得以启动。html页面并启动。启动应用程序的jnlp文件。除了一个小细节,它还能工作。我需要在JAR文件旁边包含图标和其他文件,以便使其完全正常工作。打开网站时,这些文件可能
我想创建一个基于JavaFx WebEngine的自定义FunctionPlotter组件。我的情节将在浏览器中显示。在执行plot命令之前,我必须等待浏览器初始化(它加载d3.js)。目前,我这样做的方法是将我的绘图表达式放入一个Runnable中,并将该Runnable传递给FunctionPlotter。(FunctionPlotter将runnable传递给浏览器的loading fini