- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现 spring security 3.1.0.M1,但我无法让我的应用程序将 Authentication.getPrincipal 设置为我的自定义 UserDetails 实现。当我尝试获取登录用户时,它总是返回“guest”主体。请参阅下面的 getLoggedInUser 方法。
在 Users.java(UserDetails impl)中,getAuthorities 方法永远不会被调用,也许这就是为什么没有分配 user_role 的原因。
也许我配置错误了……我附上了我的实现大纲,希望有人能发现我的错误。感谢您的协助!
public static Users getLoggedInUser() {
Users user = null;
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null && auth.isAuthenticated()) {
Object principal = auth.getPrincipal();
if (principal instanceof Users) {
user = (Users) principal;
}
}
return user;
}
安全上下文文件(删除了 xml 和模式定义):
<global-method-security secured-annotations="enabled">
</global-method-security>
<http security="none" pattern="/services/rest-api/1.0/**" />
<http security="none" pattern="/preregistered/**" />
<http access-denied-page="/auth/denied.html">
<intercept-url
pattern="/**/*.xhtml"
access="ROLE_NONE_GETS_ACCESS" />
<intercept-url
pattern="/auth/**"
access="ROLE_ANONYMOUS,ROLE_USER" />
<intercept-url
pattern="/auth/*"
access="ROLE_ANONYMOUS" />
<intercept-url
pattern="/**"
access="ROLE_USER" />
<form-login
login-processing-url="/j_spring_security_check.html"
login-page="/auth/login.html"
default-target-url="/registered/home.html"
authentication-failure-url="/auth/login.html?_dc=45" />
<logout logout-url="/auth/logout.html"
logout-success-url="/" />
<anonymous username="guest" granted-authority="ROLE_ANONYMOUS"/>
<remember-me user-service-ref="userManager" key="valid key here"/>
</http>
<!-- Configure the authentication provider -->
<authentication-manager>
<authentication-provider user-service-ref="userManager">
<password-encoder ref="passwordEncoder" />
</authentication-provider>
</authentication-manager>
用户详细信息实现(Users.java):
public class Users implements Serializable, UserDetails {
public Collection<GrantedAuthority> getAuthorities() {
List<GrantedAuthority> auth = new ArrayList<GrantedAuthority>();
auth.add(new GrantedAuthorityImpl("ROLE_USER"));
return auth;
}
user-service-ref="userManager"(UserManagerImpl.java):
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
Users user = null;
try {
user = userDAO.findByUsername(username);
} catch (DataAccessException ex) {
throw new UsernameNotFoundException("Invalid login", ex);
}
if (user == null) {
throw new UsernameNotFoundException("User not found.");
}
return user;
}
最佳答案
你没有在这一行收到编译错误:auth.add("ROLE_USER");
?
我认为应该是:auth.add(new SimpleGrantedAuthority("ROLE_USER"));
关于java - Spring Security 为 Authentication.getPrincipal() 返回 guest 而不是 UserDetails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5256955/
我正在尝试获取 session 数据,在 Service-GlobalServiceService 的 GetSessionData() 方法和我的 Component-HeaderComponent
Spring Security 有一个代表经过身份验证的用户的基类(org.springframework.security.core.userdetails.User): Models core u
我在应用程序中添加用户时遇到问题,放上代码。 //This is the SpringSecurityConfig class @Configuration public class SpringSe
我正在从用户创建 X-Auth-Token。但是,当我尝试从生成的 token 中检索用户时,它给了我一个异常 Warning: StandardWrapperValve[com.security
我有一个项目使用 spring boot,spring security 和 oauth2。当我使用 SecurityContextHolder.getContext().getAuthenticat
我已经看到,如果我想在 Spring Security 中激活并发控制,我必须添加: 到applicationContext并且: org.springframewor
我在 spring-boot 应用程序中使用 LDAP 身份验证(基于注释的配置)。我想自定义 UserDetails 对象。默认 UserDetails 实现是 LdapUserDetailsImp
如何通过将ManualUserDetails扩展org.springframework.security.core.userdetails.UserDetails添加到SecurityContextH
我需要保存一些有关用户的附加信息以排除过多的数据库请求。据我了解,我必须: 1)重写UserDetails接口(interface)。在此实现中保存我需要的所有附加信息。 2)重写UserDetail
我需要使用对象列表进行访问控制。获取该列表的查询非常复杂且冗长,因此当用户通过服务器进行身份验证时,我想将其缓存在用户对象中。我决定尝试通过 UserDetailService 和 WebSecuri
Spring Boot 应用程序具有自定义的 UserDetails。当应用程序所做的只是使用 User 类从数据库中验证现有用户时,一切正常。但是,当我尝试进行更改以便人们可以通过应用程序 GUI
我是 Spring Security 的新手。我已经实现了 UserDetails 来创建我自己的用户。我也有我的自定义 userDetailsService。现在一切正常,但我需要在不登录的情况
我正在使用 Grails 1.3.7。我有一个自定义 UserDetails在我的 customUserDetailsService 中创建的对象在认证过程中。我假设这个自定义 UserDetails
我有一个 Spring 项目,我正在将当前的身份验证转换为使用 SAML2。 就身份验证而言,我已经完成了所有工作,但是我很难让 SAML2 扩展将我的自定义 UserDetails 对象插入到 Sp
在我的 Web 应用程序中,我使用 Spring Security 和 UserDetailsService 实现进行身份验证。 现在我需要获取当前 session 的客户端 IP 地址并将其存储
我想向 userdetails 添加其他信息,例如用户的 IP 地址。有什么办法可以做到这一点?我试图创建一个新的 CustomSpringUser 类,但问题是我如何从 Authentication
我尝试使用 OAuth2 保护我的 Spring Boot 应用程序。在某些方面,一切正常。当我尝试从 oauth/token 获取访问 token 时端点第一次尝试我得到 token 没有问题。当我
我原以为我的授权实现已完成,但在尝试检索 UserDetails 对象时,我得到的只是用户名。 我正在使用具有以下细节的 oauth。 配置 AuthenticationManager: @Overr
我在我的网络项目中使用 SpringSecurity。我有保存在数据库中的实体用户。我需要使用用户 ID 在 BD 中执行请求,以从该 BD 中的其他表获取任何信息。在 Spring Security
我使用 LocalContainerEntityManagerFactoryBean 来设置 JPA EntityManagerFactory。在我使用 setPackagesToScan 扫描的扫描
我是一名优秀的程序员,十分优秀!