asp网站例子,宁夏交通建设有限公司网站,做网站个体户执照,网站替换图片怎么做rememberme多久我在“ 向Jiwhiz博客添加社交登录”一文中提到#xff0c;RememberMe功能不适用于Spring Social Security。 好吧#xff0c;这是因为该应用程序现在不通过用户名和密码对用户进行身份验证#xff0c;并且完全依靠社交网站#xff08;例如Google#xff0c;… rememberme多久 我在“ 向Jiwhiz博客添加社交登录”一文中提到RememberMe功能不适用于Spring Social Security。 好吧这是因为该应用程序现在不通过用户名和密码对用户进行身份验证并且完全依靠社交网站例如GoogleFacebook和Twitter来完成此工作。 Spring Security的默认配置无法处理这种情况。 Spring Security可能是所有Spring Portfolio项目中最复杂的软件。 为了使一个非常简单的Web应用程序具有安全性大约需要正确设置10个过滤器。 为了简化应用程序开发Spring Security从2.0版开始提供名称空间配置以自动将所有必需的组件一起设置因此开发人员无需弄清楚细节。 除非您的应用程序与传统应用程序不同否则它对大多数Web应用程序都非常有效。 将网站登录过程从用户名密码身份验证更改为没有密码的Spring Social Security之后 “记住我”的旧配置不再起作用。 Spring Security参考文档几乎没有关于Remember-Me Authentication的解释所以我买了Spring Security项目负责人Rob Winch编写的书Spring Security 3.1 。 这本书整整一章都在讨论“记住我”服务它对我在Spring Security中如何理解记住我的工作大有帮助。 读完本书后我觉得阅读Spring Security源代码要容易得多并且阅读源代码总是很有趣的。 由于我没有存储用户帐户的密码因此默认的TokenBasedRememberMeServices无法与我的应用程序一起使用并且我也不想创建自己的RememberMeServices-太多的工作。 幸运的是还有另一种持久令牌方法 即将令牌存储到数据库中并比较cookie中的令牌。 我需要的是使用PersistentTokenRepository在我的应用程序中自定义PersistentTokenBasedRememberMeServices来存储令牌。 Spring Security提供了PersistentTokenRepository的JDBC实现我发现在阅读源代码之后编写自己的MongoDB实现非常简单。 第一步是将PersistentRememberMeToken数据存储到MongoDB。 我需要为其添加一个域实体类 Document(collection RememberMeToken)
public class RememberMeToken extends BaseEntity{private String username;Indexedprivate String series;private String tokenValue;private Date date;... // getter/setter omittedpublic RememberMeToken(){}public RememberMeToken(PersistentRememberMeToken token){this.series token.getSeries();this.username token.getUsername();this.tokenValue token.getTokenValue();this.date token.getDate();}} 接下来使用Spring Data为实体添加一个存储库 public interface RememberMeTokenRepository extends MongoRepositoryRememberMeToken, String{RememberMeToken findBySeries(String series);ListRememberMeToken findByUsername(String username);
} 然后唯一相对繁重的编码是为MongoDB实现PersistentTokenRepository public class MongoPersistentTokenRepositoryImpl implements PersistentTokenRepository {private final RememberMeTokenRepository rememberMeTokenRepository;public MongoPersistentTokenRepositoryImpl(RememberMeTokenRepository rememberMeTokenRepository){this.rememberMeTokenRepository rememberMeTokenRepository;}Overridepublic void createNewToken(PersistentRememberMeToken token) {RememberMeToken newToken new RememberMeToken(token);this.rememberMeTokenRepository.save(newToken);}Overridepublic void updateToken(String series, String tokenValue, Date lastUsed) {RememberMeToken token this.rememberMeTokenRepository.findBySeries(series);if (token ! null){token.setTokenValue(tokenValue);token.setDate(lastUsed);this.rememberMeTokenRepository.save(token);}}Overridepublic PersistentRememberMeToken getTokenForSeries(String seriesId) {RememberMeToken token this.rememberMeTokenRepository.findBySeries(seriesId);return new PersistentRememberMeToken(token.getUsername(), token.getSeries(), token.getTokenValue(), token.getDate());}Overridepublic void removeUserTokens(String username) {ListRememberMeToken tokens this.rememberMeTokenRepository.findByUsername(username);this.rememberMeTokenRepository.delete(tokens);}
} 剩下的工作就是所有配置。 我需要在Java配置类中将它们连接在一起 Configuration
public class SocialAndSecurityConfig {Injectprivate Environment environment;Injectprivate AccountService accountService;Injectprivate AuthenticationManager authenticationManager;Injectprivate RememberMeTokenRepository rememberMeTokenRepository;...Beanpublic RememberMeServices rememberMeServices(){PersistentTokenBasedRememberMeServices rememberMeServices new PersistentTokenBasedRememberMeServices(environment.getProperty(application.key), accountService, persistentTokenRepository());rememberMeServices.setAlwaysRemember(true);return rememberMeServices;}Bean public RememberMeAuthenticationProvider rememberMeAuthenticationProvider(){RememberMeAuthenticationProvider rememberMeAuthenticationProvider new RememberMeAuthenticationProvider(environment.getProperty(application.key));return rememberMeAuthenticationProvider; }Bean public PersistentTokenRepository persistentTokenRepository() {return new MongoPersistentTokenRepositoryImpl(rememberMeTokenRepository);}
} 最后一步是将“记住我”服务添加到安全性xml配置文件中这是xml配置的最后一部分我们现在无法消除它。 更新一个新项目Spring Security Java Config将用Spring Security中的Java config替换xml配置。 ?xml version1.0 encodingUTF-8?
beans:beans xmlnshttp://www.springframework.org/schema/securityxmlns:beanshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsdhttp use-expressionstrue entry-point-refsocialAuthenticationEntryPointcustom-filter positionPRE_AUTH_FILTER refsocialAuthenticationFilter /logout logout-url/signout delete-cookiesJSESSIONID /remember-me services-refrememberMeServices /!-- Configure these elements to secure URIs in your application --intercept-url pattern/favicon.ico accesspermitAll /intercept-url pattern/robots.txt accesspermitAll /intercept-url pattern/resources/** accesspermitAll /intercept-url pattern/signin accesspermitAllrequires-channel#{environment[application.secureChannel]} /intercept-url pattern/signin/* accesspermitAllrequires-channel#{environment[application.secureChannel]} /intercept-url pattern/presentation/** accesshasRole(ROLE_USER)requires-channel#{environment[application.secureChannel]} /intercept-url pattern/myAccount/** accesshasRole(ROLE_USER)requires-channel#{environment[application.secureChannel]} /intercept-url pattern/myPost/** accesshasRole(ROLE_AUTHOR)requires-channel#{environment[application.secureChannel]} /intercept-url pattern/admin/** accesshasRole(ROLE_ADMIN)requires-channel#{environment[application.secureChannel]} /intercept-url pattern/** accesspermitAll //httpauthentication-manager aliasauthenticationManagerauthentication-provider refsocialAuthenticationProvider /authentication-provider refrememberMeAuthenticationProvider //authentication-manager/beans:beans 这就是向我的博客应用程序添加“记住我的身份验证”的全部方法。 现在您可以通过Google / Facebook / Twitter登录到我的网站该网站将在接下来的两周内始终记住您。 参考来自Jiwhiz博客的JCG合作伙伴 Yuan Ji 添加了Spring Security的RememberMe身份验证 。 翻译自: https://www.javacodegeeks.com/2013/03/add-rememberme-authentication-with-spring-security.htmlrememberme多久