2016-12-06 5 views
-1

私はpreAuthorizeを使用してURLを保護しようとしています。コースに登録されている人だけがコースにアクセスできます。ここに私のコードは次のとおりです。@PreAuthorizeはコントローラで動作していません

コントローラー:

@Controller 
@RequestMapping(value = "/course/{courseId}") 
@PreAuthorize("@userService.isCurrentUserinCourse(authentication, courseId)") 
public class SyllabusController { 
    @RequestMapping(value = { "/syllabus" }, method = RequestMethod.GET) 
    public ModelAndView syllabusPage(@PathVariable("courseId") int courseId) { 
    ...} 

UserServiceImpl:

@Service("userService") 
public class UserServiceImpl implements UserService { 
    @Autowired 
    private UserDAO userDAO; 
    @Override 
    public boolean isUserinCourse(int userId, int courseId) { 
     return userDAO.isUserinCourse(userId, courseId); 
    } 

    @Override 
    public boolean isCurrentUserinCourse(Authentication authentication, int courseId) { 
    if (!(authentication instanceof AnonymousAuthenticationToken)) { 
      return isUserinCourse(((UserModel) authentication.getPrincipal()).getId(), courseId); 
    } 
    return false; 
} 

春-の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-3.0.xsd 
http://www.springframework.org/schema/security 
http://www.springframework.org/schema/security/spring-security-3.2.xsd"> 
<global-method-security pre-post-annotations="enabled" /> 
<!-- enable use-expressions --> 
<http auto-config="true" use-expressions="true"> 

と私たちは私が/講座/ {IDに行きます} /シラバスログインなしでは、それはすべきではないページを表示します。また、デバッグはUserServiceImplのisCurrentUserinCourse(認証認証、int courseId)メソッドには含まれません。あなたは、静的メソッドに

SecurityContextHolder.getContext().getAuthentication() 

courseIdあなたが#coureseIdに変更する必要があり、あなたが方法ではなく、クラスにこれを移動する必要があるので、あなたのことが可能に従うことによって、認証を取得することができます

+1

への変更(ないt彼は現在のバージョンですが、まだ適用されます) –

+1

も参照してくださいhttp://stackoverflow.com/questions/32156407/preauthorize-is-not-working-what-c​​ould-be-the-problems?rq=1 –

答えて

0
@PreAuthorize("@userService.isCurrentUserinCourse(authentication, courseId)") 

http://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html#el-pre-post-annotations:再マニュアルを読ん

@PreAuthorize("@userService.isCurrentUserinCourse(#courseId)") 
    @RequestMapping(value = { "/syllabus" }, method = RequestMethod.GET) 
    public ModelAndView syllabusPage(@PathVariable("courseId") int courseId) { 
    ...} 
関連する問題