Keselamatan adalah pertimbangan penting semasa membangunkan aplikasi web. Untuk melindungi data pengguna dan menghalang capaian yang tidak dibenarkan, kami perlu menggunakan mekanisme pengesahan dan kebenaran yang boleh dipercayai. Spring Security ialah rangka kerja keselamatan yang berkuasa dan digunakan secara meluas yang menyediakan set lengkap penyelesaian untuk melindungi aplikasi kami. Dalam artikel ini, kami akan meneroka cara mendapatkan maklumat pengguna untuk pengguna yang disahkan dan tidak disahkan dalam Spring Security. Editor PHP Baicao akan menunjukkan kepada anda cara menggunakan ciri Spring Security untuk mendapatkan maklumat pengguna dan berkongsi maklumat pengguna antara perkhidmatan yang berbeza. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan memberikan anda maklumat terperinci tentang Spring Security dan membantu anda meningkatkan keselamatan aplikasi anda.
Saya mempunyai perkhidmatan rehat musim bunga dan saya ingin menggunakannya untuk pengguna yang sah dan tidak sah. Jika pengguna disahkan, saya ingin mendapatkan maklumat pengguna daripada securitycontextholder.getcontext().getauthentication()
.
.antmatchers("/app/rest/question/useroperation/list/**").permitall()
Dalam konfigurasi ouath2 seperti yang ditunjukkan di bawah, maka saya boleh mendapatkan maklumat pengguna
Pengguna yang disahkan, tetapi pengguna yang tidak disahkan mendapat ralat 401. .antmatchers("/app/rest/question/useroperation/list/**").permitall()
dan abaikan url dalam websecurity
web.ignoring()..antmatchers("/app/rest/question/useroperation/list/**")
Dalam securityconfiguration
seperti di bawah, barulah semua pengguna boleh menghubungi
perkhidmatan tetapi saya tidak boleh mendapatkan maklumat pengguna daripada konteks keselamatan. Bagaimana cara saya mengkonfigurasi keselamatan musim bunga saya untuk memanggil url untuk pengguna yang disahkan dan tidak disahkan dan mendapatkan maklumat pengguna daripada konteks keselamatan apabila pengguna log masuk.
@configuration @enableresourceserver protected static class resourceserverconfiguration extends resourceserverconfigureradapter { @inject private http401unauthorizedentrypoint authenticationentrypoint; @inject private ajaxlogoutsuccesshandler ajaxlogoutsuccesshandler; @override public void configure(httpsecurity http) throws exception { http .exceptionhandling() .authenticationentrypoint(authenticationentrypoint) .and() .logout() .logouturl("/app/logout") .logoutsuccesshandler(ajaxlogoutsuccesshandler) .and() .csrf() .requirecsrfprotectionmatcher(new antpathrequestmatcher("/oauth/authorize")) .disable() .headers() .frameoptions().disable() .sessionmanagement() .sessioncreationpolicy(sessioncreationpolicy.stateless) .and() .authorizerequests() .antmatchers("/views/**").permitall() .antmatchers("/app/rest/authenticate").permitall() .antmatchers("/app/rest/register").permitall() .antmatchers("/app/rest/question/useroperation/list/**").permitall() .antmatchers("/app/rest/question/useroperation/comment/**").authenticated() .antmatchers("/app/rest/question/useroperation/answer/**").authenticated() .antmatchers("/app/rest/question/definition/**").hasanyauthority(authoritiesconstants.admin) .antmatchers("/app/rest/logs/**").hasanyauthority(authoritiesconstants.admin) .antmatchers("/app/**").authenticated() .antmatchers("/websocket/tracker").hasauthority(authoritiesconstants.admin) .antmatchers("/websocket/**").permitall() .antmatchers("/metrics/**").hasauthority(authoritiesconstants.admin) .antmatchers("/health/**").hasauthority(authoritiesconstants.admin) .antmatchers("/trace/**").hasauthority(authoritiesconstants.admin) .antmatchers("/dump/**").hasauthority(authoritiesconstants.admin) .antmatchers("/shutdown/**").hasauthority(authoritiesconstants.admin) .antmatchers("/beans/**").hasauthority(authoritiesconstants.admin) .antmatchers("/info/**").hasauthority(authoritiesconstants.admin) .antmatchers("/autoconfig/**").hasauthority(authoritiesconstants.admin) .antmatchers("/env/**").hasauthority(authoritiesconstants.admin) .antmatchers("/trace/**").hasauthority(authoritiesconstants.admin) .antmatchers("/api-docs/**").hasauthority(authoritiesconstants.admin) .antmatchers("/protected/**").authenticated(); } }
Konfigurasi keselamatan
@Configuration @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Inject private UserDetailsService userDetailsService; @Bean public PasswordEncoder passwordEncoder() { return new StandardPasswordEncoder(); } @Inject public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder()); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring() .antMatchers("/bower_components/**") .antMatchers("/fonts/**") .antMatchers("/images/**") .antMatchers("/scripts/**") .antMatchers("/styles/**") .antMatchers("/views/**") .antMatchers("/i18n/**") .antMatchers("/swagger-ui/**") .antMatchers("/app/rest/register") .antMatchers("/app/rest/activate") .antMatchers("/app/rest/question/useroperation/list/**") .antMatchers("/console/**"); } @EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true) private static class GlobalSecurityConfiguration extends GlobalMethodSecurityConfiguration { @Override protected MethodSecurityExpressionHandler createExpressionHandler() { return new OAuth2MethodSecurityExpressionHandler(); } } }
permitall()
仍然需要 authentication
对象出现在 securitycontext
dalam.
Untuk pengguna bukan oauth, ini boleh dicapai dengan mendayakan akses tanpa nama:
@override public void configure(httpsecurity http) throws exception { http //some configuration .and() .anonymous() //allow anonymous access .and() .authorizerequests() .antmatchers("/views/**").permitall() //other security settings
Akses tanpa nama akan menambah penapis tambahan: anonymousauthenticationfilter
到填充anonymousauthenticationtoken
作为身份验证信息的过滤器链,以防securitycontext
中没有authentication
objek
Saya mempunyai konfigurasi keselamatan ini untuk menyemak authuser melalui /public/authphpcnendcphp Cina:
@Override protected void configure(HttpSecurity http) throws Exception { http.cors().and().authorizeRequests() .antMatchers("/api/skills/**", "/api/profile/**", "/api/info/**").authenticated() .antMatchers("/api/**").hasAuthority(Role.ROLE_ADMIN.getAuthority()) .antMatchers("/public/auth").permitAll() .and().httpBasic() .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and().csrf().disable(); } @GetMapping(value = "/public/auth") private ResponseEntity<User> getAuthUser(@AuthenticationPrincipal AuthUser authUser) { return authUser == null ? ResponseEntity.notFound().build() : ResponseEntity.ok(authUser.getUser()); }
Atas ialah kandungan terperinci Spring Security mendapat maklumat pengguna untuk pengguna yang disahkan dan tidak disahkan dalam perkhidmatan yang tinggal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!