私はSpring、Spring Security、BlazeDS、Flex、およびSpring-Flexを使用しています。ユーザ認証のためにSpring Securityをチェックし、Flexからロールを取得するにはどうすればよいですか?
私はchannelSet.login()
ととchannelSet.logout()
を呼び出して、認証のためにSpring Securityにフックできることを知っています。 channelSet.authenticated
は、channelSet.login()
に電話するまで、常にの間違いとして始まるので、明らかに現在のFlexセッションについてのみ知っています。私が何をしたいか
:ユーザーがセッション中にすでにあるかどうかを知るためにFlexから
- チェック。
- もしそうなら、ユーザー名と役割が必要です。
私はちょうどこれがこれをルックアップし、他の誰かのために簡単になるように、私は、私は以下のbrd6644の答えから、使用する溶液の詳細を追加しようと思いました
UPDATE。私はSecurityContext
注射可能にするにはthis StackOverflow答えを使用しました。私はこの回答のコードを書き直すことはしませんので、SecurityContextFacade
を見てください。
securityServiceImpl.java
securityContext.xml
<security:http auto-config="true">
<!-- Don't authenticate Flex app -->
<security:intercept-url pattern="/flexAppDir/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<!-- Don't authenticate remote calls -->
<security:intercept-url pattern="/messagebroker/amfsecure" access="IS_AUTHENTICATED_ANONYMOUSLY" />
</security:http>
<security:global-method-security secured-annotations="enabled" />
<bean id="securityService" class="ext.domain.project.service.SecurityServiceImpl">
<property name="securityContextFacade" ref="securityContextFacade" />
</bean>
<bean id="securityContextFacade" class="ext.domain.spring.security.SecurityContextHolderFacade" />
flexContext.xml
<flex:message-broker>
<flex:secured />
</flex:message-broker>
<flex:remoting-destination ref="securityService" />
<security:http auto-config="true" session-fixation-protection="none"/>
FlexSecurityTest.mxml
<mx:Application ... creationComplete="init()">
<mx:Script><![CDATA[
[Bindable]
private var userDetails:UserDetails; // custom VO to hold user details
private function init():void {
security.getUserDetails();
}
private function showFault(e:FaultEvent):void {
if (e.fault.faultCode == "Client.Authorization") {
Alert.show("You need to log in.");
// show the login form
} else {
// submit a ticket
}
}
private function showResult(e:ResultEvent):void {
userDetails = new UserDetails();
userDetails.username = e.result.username;
userDetails.roles = e.result.roles;
// show user the application
}
]]></mx:Script>
<mx:RemoteObject id="security" destination="securityService">
<mx:method name="getUserDetails" fault="showFault(event)" result="showResult(event)" />
</mx:RemoteObject>
...
</mx:Application>
これは私がやっていたことよりもずっと良かったです。それは非常にうまくいって、多くのコードを保存しました。 –