タグ付けされた質問 「spring-security」

Spring Securityは、Spring Frameworkのアプリケーションセキュリティソリューションです。Springセキュリティを使用して、URLとメソッド呼び出しを保護できます。スタンドアロンのWebアプリケーション、ポートレット、およびますますRESTアプリケーションを保護するために広く使用されています。

17
Spring Securityを使用する場合、Beanで現在のユーザー名(つまりSecurityContext)情報を取得する適切な方法は何ですか?
Spring Securityを使用するSpring MVC Webアプリがあります。現在ログインしているユーザーのユーザー名を知りたい。以下のコードスニペットを使用しています。これは受け入れられる方法ですか? 私はこのコントローラー内で静的メソッドを呼び出すのが好きではありません-これは、私見のSpringの目的全体を無効にします。代わりに、現在のSecurityContextまたは現在の認証が挿入されるようにアプリを構成する方法はありますか? @RequestMapping(method = RequestMethod.GET) public ModelAndView showResults(final HttpServletRequest request...) { final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName(); ... }

4
SpringによるRESTful認証
問題: 機密情報を含むSpring MVCベースのRESTful APIがあります。APIは保護する必要がありますが、各リクエストでユーザーの資格情報(ユーザー/パスの組み合わせ)を送信することは望ましくありません。RESTガイドライン(および内部のビジネス要件)に従って、サーバーはステートレスのままである必要があります。APIは、マッシュアップスタイルのアプローチで別のサーバーによって使用されます。 要件: クライアントは、.../authenticate資格情報を使用して(保護されていないURL)に要求を行います。サーバーは、サーバーが将来のリクエストを検証してステートレスを維持するのに十分な情報を含む安全なトークンを返します。これはおそらく、Spring SecurityのRemember-Meトークンと同じ情報で構成されます。 クライアントは、さまざまな(保護された)URLへの後続の要求を作成し、以前に取得したトークンをクエリパラメーター(または、あまり望ましくないが、HTTP要求ヘッダー)として追加します。 クライアントはクッキーを保存することを期待できません。 すでにSpringを使用しているため、このソリューションではSpring Securityを利用する必要があります。 私たちはこの仕事をするために頭を壁にぶつけてきましたので、うまくいけば誰かがすでにこの問題を解決しているでしょう。 上記のシナリオで、この特定のニーズをどのように解決できますか?

4
Spring SecurityでのRoleとGrantedAuthorityの違い
Spring Securityには、アクセスを承認/制御する権限をGrantedAuthority取得するためのインターフェースなどの概念と実装があります。 createSubUsersやdeleteAccountsなどの許可された操作を管理者に許可します(ロール付きROLE_ADMIN)。 オンラインで見ているチュートリアル/デモと混同しています。私は読んだものをつなげようとしますが、2つを同じように扱っていると思います。 文字列をhasRole消費していGrantedAuthorityますか?私は間違いなく理解においてそれを間違っています。これらはSpring Securityで概念的に何ですか? ユーザーの役割を、その役割の権限とは別に保管するにはどうすればよいですか? 私はまたorg.springframework.security.core.userdetails.UserDetails、User(最後のGrantedAuthorityをメモする)を消費する認証プロバイダー参照DAOで使用されるインターフェースも調べています。 public User(String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) または、他の2つを区別する他の方法はありますか?それともサポートされていませんか?私たちは自分で作る必要がありますか?

1
WildflyのSpring Security:フィルターチェーンの実行中のエラー
Spring Security SAML ExtensionをSpring Bootと統合しようとしています。 この件については、完全なサンプルアプリケーションを開発しました。そのソースコードはGitHubで入手できます。 GitHubのspring-boot-saml-integration これをSpring Bootアプリケーション(SDK組み込みアプリケーションサーバーに対して実行)として実行することにより、WebAppは正常に動作します。 残念ながら、同じAuthNプロセスはUndertow / WildFlyではまったく機能しません。 ログによると、IdPは実際にAuthNプロセスUserDetailsを実行します。カスタム実装の指示は正しく実行されます。実行フローにもかかわらず、Springは現在のユーザーの権限を設定および保持しません。 @Component public class SAMLUserDetailsServiceImpl implements SAMLUserDetailsService { // Logger private static final Logger LOG = LoggerFactory.getLogger(SAMLUserDetailsServiceImpl.class); @Override public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException, SSOUserAccountNotExistsException { String userID = credential.getNameID().getValue(); if (userID.compareTo("jdoe@samplemail.com") != 0) { // We're simulating …

15
Spring 3.0-XMLスキーマ名前空間のSpring NamespaceHandlerが見つからない[http://www.springframework.org/schema/security]
これの原因は何でしょうか? XMLスキーマ名前空間のSpring NamespaceHandlerが見つかりません[ http://www.springframework.org/schema/security] org.springframework.web.context.ContextLoader initWebApplicationContext: Context initialization failed org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security] Offending resource: ServletContext resource [/WEB-INF/applicationContext.xml] これは私のapplicationContext.xmlです: <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> ... </beans:beans> 私のpom.xmlには次のものがあります: <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>3.0.1.RELEASE</version> </dependency> …

7
サブジェクト、ユーザー、プリンシパルの意味と違いは何ですか?
セキュリティフレームワークのコンテキストでは、サブジェクト、ユーザー、プリンシパルなどのいくつかの用語が一般的に使用されますが、明確な定義とそれらの違いを見つけることができませんでした。 だから、正確にこれらの用語の意味を行うと、なぜこれらの区別されている主題とプリンシパルが必要?

8
アクティブユーザーのUserDetailsを取得する方法
私のコントローラーで、アクティブな(ログインした)ユーザーが必要な場合、次のようにしてUserDetails実装を取得します。 User activeUser = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); log.debug(activeUser.getSomeCustomField()); 正常に動作しますが、このような場合、Springを使用すると生活が楽になると思います。持ってする方法があるUserDetailsコントローラまたは方法のいずれかにautowiredは? たとえば、次のようなものです。 public ModelAndView someRequestHandler(Principal principal) { ... } しかしUsernamePasswordAuthenticationToken、を取得するUserDetails代わりに、私は代わりに取得しますか? エレガントなソリューションを探しています。何か案は?


11
Spring Securityを使用した単体テスト
私の会社では、Spring MVCを評価して、次のプロジェクトの1つで使用するかどうかを決定しています。これまでのところ、私は今まで見たことを気に入っています。今は、Spring Securityモジュールを調べて、それが私たちが使用できる/すべきかどうかを判断しています。 私たちのセキュリティ要件はかなり基本的なものです。ユーザーは、サイトの特定の部分にアクセスできるように、ユーザー名とパスワードを提供できる必要があります(アカウントに関する情報を取得するなど)。サイトには、匿名ユーザーにアクセスを許可するページ(FAQ、サポートなど)がいくつかあります。 私が作成しているプロトタイプでは、認証されたユーザーのSessionに "LoginCredentials"オブジェクト(ユーザー名とパスワードのみが含まれています)を格納しています。一部のコントローラは、このオブジェクトがセッションにあるかどうかを確認して、たとえばログインしたユーザー名への参照を取得します。私はこの自家製ロジックを代わりにSpring Securityで置き換えようとしています。これは、「ログインしたユーザーをどのように追跡するのか」を削除するという素晴らしい利点があります。そして「ユーザーをどのように認証するのか?」私のコントローラー/ビジネスコードから。 Spring Securityは、アプリ内のどこからでもユーザー名/プリンシパル情報にアクセスできるようにする(スレッドごとの)「コンテキスト」オブジェクトを提供しているようです... Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); ある意味、このオブジェクトは(グローバル)シングルトンなので、これは非常に非Springのようです。 私の質問はこれです:これがSpring Securityで認証されたユーザーに関する情報にアクセスする標準的な方法である場合、ユニットテストで必要なときにユニットテストで利用できるように、AuthenticationオブジェクトをSecurityContextに注入するための受け入れられた方法は何ですか?認証済みユーザー? これを各テストケースの初期化メソッドに関連付ける必要がありますか? protected void setUp() throws Exception { ... SecurityContextHolder.getContext().setAuthentication( new UsernamePasswordAuthenticationToken(testUser.getLogin(), testUser.getPassword())); ... } これは過度に冗長に見えます。もっと簡単な方法はありますか? SecurityContextHolderオブジェクト自体は、非常に非春のように思えます...

3
Spring Securityフィルターチェーンの仕組み
Springのセキュリティはフィルターのチェーン上に構築されていることを理解しています。これは、リクエストを傍受し、認証を検出(存在しない)し、認証エントリポイントにリダイレクトするか、リクエストを承認サービスに渡し、最終的にリクエストをサーブレットにヒットするか、セキュリティ例外をスローします。 (未認証または無許可)。DelegatingFitlerProxyはこれらのフィルターを接着します。これらのタスクを実行するために、これらはUserDetailsS​​erviceやAuthenticationManagerなどのアクセスサービスにフィルターをかけます。 チェーン内の主要なフィルターは(順序で) SecurityContextPersistenceFilter(JSESSIONIDから認証を復元します) UsernamePasswordAuthenticationFilter(認証を実行) ExceptionTranslationFilter(FilterSecurityInterceptorからのセキュリティ例外をキャッチ) FilterSecurityInterceptor(認証と承認の例外をスローする場合があります) これらのフィルターの使用方法がわかりません。春に提供されるフォームログインの場合、UsernamePasswordAuthenticationFilterは/ loginにのみ使用され、後者のフィルターは使用されないのですか?フォーム・ログイン名前空間の要素は、これらのフィルタを自動設定しますか?すべてのリクエスト(認証済みかどうかにかかわらず)は、非ログインURLのFilterSecurityInterceptorに到達しますか? ログインから取得したJWT-tokenでREST APIを保護したい場合はどうなりますか?2つの名前空間構成httpタグ、権利を構成する必要がありますか?1つは/ loginでUsernamePasswordAuthenticationFilter、もう1つはREST URLで、customを使用しJwtAuthenticationFilterます。 2つのhttp要素を構成すると2つ作成されますspringSecurityFitlerChainsか?されてUsernamePasswordAuthenticationFilter、私は宣言するまで、デフォルトではオフになってform-login?どのように既存のものからSecurityContextPersistenceFilter取得するフィルターに置き換えるのですか?AuthenticationJWT-tokenJSESSIONID

3
Shiro vs. SpringSecurity [終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 この質問を改善する 私は現在Javaベースのセキュリティフレームワークを評価しています。私はSpring 3.0ユーザーなので、SpringSecurityが適切な選択であるように見えましたが、Springセキュリティは過度の複雑さに悩まされているようで、セキュリティを実装しやすくしているようには見えません。 Shiroは、より一貫性があり、理解しやすいようです。私はこれら2つのフレームワークの間の長所と短所のリストを探しています。

7
Spring MVCのDelegatingFilterProxyのポイントは何ですか?
私のSpring MVCアプリにこれが見られますweb.xml: <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> なぜそこにあるのか、そしてそれが実際に必要かどうかを理解しようとしています。 私はこの説明をSpringドキュメントで見つけましたが、それは私がそれを理解するのに役立ちません: このコンポーネントは、で定義されたサーブレットweb.xmlとSpringで定義されたコンポーネントの間の「接着剤」であることが示唆されているようapplicationContext.xmlです。 7.1 DelegatingFilterProxy サーブレットフィルターを使用する場合は、明らかにそれらをで宣言する必要がありますweb.xml。そうしないと、サーブレットコンテナーによって無視されます。Spring Securityでは、フィルタークラスはアプリケーションコンテキストで定義されたSpring Beanでもあるため、Springの豊富な依存性注入機能とライフサイクルインターフェースを利用できます。SpringはとアプリケーションコンテキストDelegatingFilterProxy間のリンクを提供しweb.xmlます。 DelegatingFilterProxyを使用すると、web.xmlファイルに次のようなものが表示されます。 <filter> <filter-name>myFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> フィルターは実際にはDelegatingFilterProxyであり、実際にフィルターのロジックを実装するクラスではないことに注意してください。どのようなDelegatingFilterProxy行いは、Springアプリケーションコンテキストから取得された豆を通過フィルタのメソッドを委譲です。これにより、BeanはSpring Webアプリケーションのコンテキストライフサイクルサポートと構成の柔軟性を活用できます。Beanは実装javax.servlet.Filterする必要があり、filter-name要素と同じ名前である必要があります。詳細については、DelegatingFilterProxyのJavadocを参照してください それで、これをから取り出した場合web.xml、どうなりますか?サーブレットがSpringコンテナと通信できなくなりますか?**

18
Spring SecurityでJavaコードの「hasRole」をチェックする方法は?
Javaコードでユーザー権限または許可を確認する方法 例-役割に応じてユーザーのボタンを表示または非表示にしたい。次のような注釈があります。 @PreAuthorize("hasRole('ROLE_USER')") Javaコードで作成する方法は?何かのようなもの : if(somethingHere.hasRole("ROLE_MANAGER")) { layout.addComponent(new Button("Edit users")); }

13
Hibernate LazyInitializationExceptionを修正する方法:ロールのコレクションを遅延初期化できませんでした、プロキシを初期化できませんでした-セッションがありません
SpringプロジェクトのカスタムAuthenticationProviderで、ログに記録されたユーザーの権限のリストを読み取ろうとしていますが、次のエラーが発生します。 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.horariolivre.entity.Usuario.autorizacoes, could not initialize proxy - no Session at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566) at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186) at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545) at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124) at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266) at com.horariolivre.security.CustomAuthenticationProvider.authenticate(CustomAuthenticationProvider.java:45) at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156) at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:177) at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:211) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:57) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) …

6
Spring Security / SpringMVCで認証されたユーザーを手動で設定する方法
新しいユーザーが「新しいアカウント」フォームを送信した後、そのユーザーを手動でログインして、後続のページにログインする必要がないようにしたいと考えています。 春のセキュリティインターセプターを通過する通常のフォームログインページは問題なく機能します。 new-account-formコントローラーで、UsernamePasswordAuthenticationTokenを作成し、それをSecurityContextに手動で設定しています。 SecurityContextHolder.getContext().setAuthentication(authentication); 同じページで、後でユーザーがログインしていることを確認します。 SecurityContextHolder.getContext().getAuthentication().getAuthorities(); これにより、認証で以前に設定した権限が返されます。すべては順調です。 しかし、この同じコードがロードする次のページで呼び出されると、認証トークンはUserAnonymousになります。 前回のリクエストで設定した認証が保持されなかった理由がわかりません。何かご意見は? セッションIDが正しく設定されていないことが原因である可能性がありますか? どういうわけか私の認証を上書きしている可能性があるものはありますか? おそらく、認証を保存するために別の手順が必要なだけですか? または、どういうわけか単一の要求ではなく、セッション全体で認証を宣言するために必要なことはありますか? ここで何が起こっているのかを理解するのに役立つかもしれないいくつかの考えを探しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.