アプリケーションシナリオ
最近、コミュニティには、小さな広告で記事を投稿した人々が常にいます。これは、コミュニティの雰囲気に深刻な影響を与えています。私はとても怒っています!このタイプのユーザーの場合、永久にブロックする必要があります!
コミュニティのセキュリティフレームワークは、春のセキュリティと春のセッションを使用し、ログインステータスは30日間有効です。セッション情報はRedisに存在します。これらの不正なユーザーに優雅に対処する方法は?
まず、ユーザーの権限を分割するだけです。
次に、指定されたユーザー(role_user-> role_black)をブロックし、ユーザーに強制的に終了します(redisでユーザーのセッション情報を削除します)。
プロジェクト関連の依存関係と構成
Maven依存関係
<! - security-> <dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-security </artifactid> </dependency> <! - redis-> <dependency> org.springframework.boot < </dependency> <! - 春のセッションRedis-> <依存関係> groupid> org.springframework.session </groupid> <artifactid> spring-session-data-redis </artifactid> </dependency>
春のセッションポリシー構成application.yml
#ここでRedis接続関連の構成を省略:セッション:Store-Type:Redis
スプリングセキュリティ構成コードサンプル
@enablewebsecurityクラスWebsecurityConfig extends websecurityconfigurerAdapter {@Override Protected void configure(httpsecurity http)スロー例外{http .Athorizerequests().AntMatchers( "/user/**")。 .AntMatchers( "/manager/**")。hasanyrole(roleenum.manager.getMessage()).AnyRequest()。primLogin()。および()。 }}ユーザーインターフェイスへの強制終了割り当て
com.spring4all.bean.responsebean;インポートcom.spring4all.service.userservice; Import lombok.allargsconstructor; Import org.springframework.session.findbyindexnamesessionRepository; Import org.springframework.session; import; org.springframework.session.data.redis.redisoperationssessionRepository; Import org.springframework.web.bind.annotation.getMapping; import org.springframework.web.bind.annotation.pathvariable; Import org.springframework.web.bind.annotation org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;import java.util.List;import java.util.Map;@RestController@AllArgsConstructorpublic class UserManageApi { private final FindByIndexNameSessionRepository<?セッション> sessionRepositoryを拡張します。プライベートRedisoperationssessionSessionSessionSession RedisoperationsSessionRepository;プライベートファイナルユーザーサービスユーザーサービス。 /***指定されたユーザーのログアウトを管理* @param useridユーザーID* @returnユーザーセッション情報*/@preauthorize( "hasrole( 'managle')")@getmapping( "/manager/logout/{userid}")public responsebean data( @pathvariable()long userid){// combine infusis in busigs fidis in edis edis edis edis edis edis edis edis ediname(文字列indexName = userservice.getPrincipalNameIndexName(userId); //ユーザーのセッション情報を照会し、返される値キーはsessionidマップ<string、?セッション> usersions = sessionRepository.findbyindexnameandindexvalue(findbyIndexNamesEssionRepository.principal_name_index_name、indexName); //ユーザーのセッション情報リストを削除<String> SESSIONIDS = new ArrayList <>(useressions.keyset()); for(string session:sessionids){redisoperationssessionRepository.deletebyid(session); } Responsebean.success(usersisions)を返します。 }}説明indexNameは、spinital.getName()の返品値です。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。