我无法使用 Spring Security 登录
Posted
技术标签:
【中文标题】我无法使用 Spring Security 登录【英文标题】:I cannot login using Spring Security 【发布时间】:2019-01-12 16:34:42 【问题描述】:我在尝试使用 Spring Security 登录我的应用程序时遇到问题,无论我做什么,它总是将我重定向到我用于非授权访问的 JSP。
security-config.xml
的配置我试过hasRole('ROLE_USER')
和permitAll
都没有工作。
security-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<http>
<intercept-url pattern="/user/**" access="hasAnyRole('ROLE_USER') />
<form-login login-page="/customLogin.jsp"
login-processing-url="/appLogin"
username-parameter="app_username"
password-parameter="app_password"
default-target-url="/user/home" />
<logout
logout-url="/appLogout"
logout-success-url="/customLogin.jsp" />
<access-denied-handler error-page="/user/error" />
</http>
<beans:bean name="bcryptEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
<beans:bean name="myAppUserDetailsService"
class="com.prh.tracking.services.impl.UserDetailsServiceImpl" />
<beans:bean name="userService"
class="com.prh.tracking.services.impl.UserServiceImpl" />
<authentication-manager>
<authentication-provider
user-service-ref="myAppUserDetailsService">
<password-encoder ref="bcryptEncoder" />
</authentication-provider>
</authentication-manager>
<global-method-security
secured-annotations="enabled" />
</beans:beans>
UserController.java
@Controller
@RequestMapping("/user")
public class UserController
@Autowired
private UserService userService;
@RequestMapping(value="/home")
public String home(ModelMap model, Authentication authentication)
authentication.getPrincipal();
model.addAttribute("user", userService.getUser(authentication.getName()));
return "user-info";
@RequestMapping(value="/error")
public String error()
return "access-denied";
UserDetailsServiceImpl.java
@Service
public class UserDetailsServiceImpl implements UserDetailsService
@Autowired
private UserDAO userDAO;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
UserEntity user = userDAO.getUser(username);
GrantedAuthority authority = new SimpleGrantedAuthority(user.getRole());
UserDetails userDetails = (UserDetails)new User(user.getName(), user.getPassword(), Arrays.asList(authority));
return userDetails;
这是我的数据库中的内容:
【问题讨论】:
@GauravSrivastav 好吧,我找到了一个关于这个的教程,然后我就开始学习 Spring Security。 执行,祝你好运。 @GauravSrivastav 我希望在进行更多更改之前解决此问题,或者 Spring Security 仅适用于 Spring Boot? 如何查看密码? @sajib 就像我说的我遵循了一个教程并且仍然试图了解一切是如何工作的,我认为它是通过UserDetailsServiceImp
完成的,因为如果我尝试使用错误的密码访问,我会收到一条消息说凭据不正确。
【参考方案1】:
当您设置对permitAll
的访问权限时,您甚至不应该被要求提供凭据,并且根本不会咨询 UserDetailsServiceImpl。
您可能需要启用这样的网络安全表达式:
<http use-expressions="true">
看 https://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html#el-access-web
【讨论】:
以上是关于我无法使用 Spring Security 登录的主要内容,如果未能解决你的问题,请参考以下文章
仅使用 Spring Security 自定义令牌无状态保护 REST 控制器,同时保持常规状态完整 Web 登录正常工作
Grails/Spring Security:无法使用新创建的用户登录