cookie clear & ip support

This commit is contained in:
MaxKey
2022-07-28 09:15:33 +08:00
parent 9df09cc5ec
commit 63ca510af7
5 changed files with 40 additions and 17 deletions

View File

@@ -19,6 +19,7 @@ import { ActivatedRoute, Router } from '@angular/router';
import { ReuseTabService } from '@delon/abc/reuse-tab'; import { ReuseTabService } from '@delon/abc/reuse-tab';
import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth'; import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
import { SettingsService } from '@delon/theme'; import { SettingsService } from '@delon/theme';
import { finalize } from 'rxjs/operators';
import { AuthnService } from '../../service/authn.service'; import { AuthnService } from '../../service/authn.service';
import { SocialsProviderService } from '../../service/socials-provider.service'; import { SocialsProviderService } from '../../service/socials-provider.service';
@@ -44,12 +45,20 @@ export class LogoutComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
this.redirect_uri = this.route.snapshot.params[CONSTS.REDIRECT_URI]; this.redirect_uri = this.route.snapshot.params[CONSTS.REDIRECT_URI];
this.authnService.logout(); this.authnService
this.tokenService.clear(); .logout()
if (this.redirect_uri == null || this.redirect_uri == '') { .pipe(
this.router.navigateByUrl(this.tokenService.login_url!); finalize(() => {
} else { this.tokenService.clear();
this.router.navigateByUrl(this.redirect_uri); if (this.redirect_uri == null || this.redirect_uri == '') {
} this.router.navigateByUrl(this.tokenService.login_url!);
} else {
this.router.navigateByUrl(this.redirect_uri);
}
})
)
.subscribe(res => {
console.log(`Logout Response ${res.data}`);
});
} }
} }

View File

@@ -63,14 +63,24 @@ export class AuthnService {
//退出 //退出
logout() { logout() {
this.cookieService.delete(CONSTS.CONGRESS); this.cookieService.delete(CONSTS.CONGRESS, '/');
return this.http.get('/login/logout'); this.cookieService.delete(CONSTS.ONLINE_TICKET, '/', this.getSubHostName());
return this.http.get('/logout');
} }
congress(authParam: any) { congress(authParam: any) {
return this.http.post('/login/congress?_allow_anonymous=true', authParam); return this.http.post('/login/congress?_allow_anonymous=true', authParam);
} }
getSubHostName(): string {
let hostnames = window.location.hostname.split('.');
let subHostName = window.location.hostname;
if (hostnames.length >= 2 && !CONSTS.IP_V4_REGEXEXP.test(subHostName)) {
subHostName = `${hostnames[hostnames.length - 2]}.${hostnames[hostnames.length - 1]}`;
}
return subHostName;
}
clear() { clear() {
this.tokenService.clear(); this.tokenService.clear();
localStorage.setItem(CONSTS.REMEMBER, ''); localStorage.setItem(CONSTS.REMEMBER, '');
@@ -92,14 +102,8 @@ export class AuthnService {
passwordSetType: authJwt.passwordSetType passwordSetType: authJwt.passwordSetType
}; };
let hostnames = window.location.hostname.split('.');
let subHostName = window.location.hostname;
if (hostnames.length >= 2) {
subHostName = `${hostnames[hostnames.length - 2]}.${hostnames[hostnames.length - 1]}`;
}
this.cookieService.set(CONSTS.CONGRESS, authJwt.token, { path: '/' }); this.cookieService.set(CONSTS.CONGRESS, authJwt.token, { path: '/' });
this.cookieService.set(CONSTS.ONLINE_TICKET, authJwt.ticket, { domain: subHostName, path: '/' }); this.cookieService.set(CONSTS.ONLINE_TICKET, authJwt.ticket, { domain: this.getSubHostName(), path: '/' });
if (authJwt.remeberMe) { if (authJwt.remeberMe) {
localStorage.setItem(CONSTS.REMEMBER, authJwt.remeberMe); localStorage.setItem(CONSTS.REMEMBER, authJwt.remeberMe);

View File

@@ -15,6 +15,11 @@
*/ */
export const CONSTS = { export const CONSTS = {
// Regular expression to check if string is a IP v4 address
IP_V4_REGEXEXP: /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gi,
// Regular expression to check if string is a IPv6 address
IP_V6_REGEXEXP:
/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/gi,
INST: 'inst', INST: 'inst',
CONGRESS: 'congress', CONGRESS: 'congress',
ONLINE_TICKET: 'online_ticket', ONLINE_TICKET: 'online_ticket',

View File

@@ -136,7 +136,10 @@ public class MaxKeyMvcConfig implements WebMvcConfigurer {
.addPathPatterns("/authz/credential/**") .addPathPatterns("/authz/credential/**")
.addPathPatterns("/authz/oauth/v20/approval_confirm/**") .addPathPatterns("/authz/oauth/v20/approval_confirm/**")
.addPathPatterns("/authz/oauth/v20/authorize/approval/**") .addPathPatterns("/authz/oauth/v20/authorize/approval/**")
.addPathPatterns("/logon/oauth20/bind/**"); .addPathPatterns("/logon/oauth20/bind/**")
.addPathPatterns("/logout")
.addPathPatterns("/logout/**")
;
_logger.debug("add Permission Interceptor"); _logger.debug("add Permission Interceptor");

View File

@@ -114,6 +114,8 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer {
.addPathPatterns("/file/upload/") .addPathPatterns("/file/upload/")
.addPathPatterns("/logout")
.addPathPatterns("/logout/**")
; ;
_logger.debug("add PermissionAdapter"); _logger.debug("add PermissionAdapter");