我正在使用spring security来验证用户身份。
AdminController.java
@Controller
@Secured("ROLE_ADMIN")
public class AdminController {
@RequestMapping("/list")
public ModelAndView listProductController(@ModelAttribute("pForm") Product product, ModelMap model)
{
return new ModelAndView("list", model);
}
}
我上面的代码,我想只有管理员可以访问网址http://localhost/Pgga/list
,但即使没有登录,我也可以访问此页面。
弹簧security.xml文件
<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">
<global-method-security secured-annotations="enabled" />
<!-- enable use-expressions -->
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/admin*" access="ROLE_ADMIN" />
<!-- access denied page -->
<access-denied-handler error-page="/403" />
<form-login
login-page="/login"
login-processing-url="/login.do"
default-target-url="/index"
authentication-failure-url="/login?error"
username-parameter="emailID"
password-parameter="password" />
<logout
logout-success-url="/login?logout"
delete-cookies="JSESSIONID"
invalidate-session="true" />
<csrf/>
</http>
<authentication-manager>
<authentication-provider user-service-ref="userAuthenticationProvider">
<password-encoder hash="plaintext" />
</authentication-provider>
</authentication-manager>
</beans:beans>
如何才允许管理员进入管理区?
答案 0 :(得分:1)
使用hasRole('admin')或设置use-expressions =“false”....
答案 1 :(得分:1)
登录重定向到自身,因为您设置了:
login-page="/login"
并且它会一直重定向到用户页面,因为Spring知道/login
它的登录页面但没有权限使用它,所以添加:
<intercept-url pattern="/login" access="permitAll()" />
确保允许登录页面,并且可以为经过身份验证的用户授予访问权限或分配角色。