アプリケーションに現在ログインしているすべてのユーザーのリストを取得したいと考えています。SessionRegistry
メソッドを呼び出すためにコードに挿入する必要があることはわかっていますgetAllPrincipals()
。残念ながら、私はいつも空のリストを取得します。人口が少ないようでSessionRegistry
、作り方がわかりません。StackOverflowにも同様の質問があることは知っていますが、問題の解決にはまだ問題があります。まず、web.xml に次のコードを追加します。
<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>
私が知っているように、セッションのライフサイクル (作成、破棄) に関する情報を取得できます。それだけです。前進するのに大きな問題があります。セキュリティ Bean を含む私のファイルを以下に示します。
<beans:bean id="successAuth" class="pl.fp.microblog.auth.SuccessAuth"/>
<beans:bean id="failureAuth" class="pl.fp.microblog.auth.FailureAuth"/>
<http auto-config="true">
<intercept-url pattern="/" access="ROLE_USER" />
<intercept-url pattern="/profile/*" access="ROLE_USER" />
<form-login
login-page="/login"
authentication-success-handler-ref="successAuth"
authentication-failure-handler-ref="failureAuth"
username-parameter="username"
password-parameter="password"
login-processing-url="/login_processing_url"
/>
<security:logout logout-url="/logout_processing_url"/>
<session-management>
<concurrency-control max-sessions="1" session-registry-alias="sessionRegistry"/>
</session-management>
</http>
<beans:bean id="saltProvider" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
<beans:property name="userPropertyToUse" value="username"></beans:property>
</beans:bean>
<beans:bean id="userService" class="pl.fp.microblog.auth.UserService">
<beans:property name="userDAO" ref="userDAO"/>
</beans:bean>
<authentication-manager>
<security:authentication-provider user-service-ref="userService">
<password-encoder hash="sha-256">
<security:salt-source ref="saltProvider"/>
</password-encoder>
</security:authentication-provider>
</authentication-manager>
ここで getAllPrinciples() メソッドを呼び出します。
@Transactional
@Controller
public class SiteController {
@Autowired
private UserDAO userDAO;
@Autowired
private SessionRegistry sessionRegistry;
@RequestMapping(value = "profile/{login}")
public String profilePage(@PathVariable String login, HttpServletRequest req) throws SQLException {
...
sessionRegistry.getAllPrincipals().size()
...
return "profile";
}
}
session-managemenent
などにコードを追加しようとしましたがhttp
、ConcurrentSessionFilter
実際には理解できません。そして、ドキュメンテーションは私には複雑すぎます。誰かが私を助けて、次に何をすべきかを段階的に教えてくれますか? どの豆を追加する必要がありますか?