Ich benutze Federsicherheit für meine Crud-Anwendung. Nach dem Einloggen muss die Mitarbeiterliste angezeigt werden. wenn ich in dieser Seite eine Operation durchführen müssen, ist es Umleitung zur Login-Seite auch nach angemeldet.Auch nach der Anmeldung leitet jede URL zur Anmeldeseite (Federsicherheit) um.
Das ist mein Controller
@RequestMapping(value="/login")
public String log(Model model){
model.addAttribute("user", new User());
return "login";
}
@RequestMapping(value="/loginUser",method=RequestMethod.POST)
public String login(@ModelAttribute("user") User user,Model model){
try{
userService.login(user);
model.addAttribute("employee", new Employee());
model.addAttribute("user", getPrincipal());
return "redirect:/employees";
}catch(Exception e){
return "redirect:/accessDenied";
}
}
@RequestMapping(value = "/employees", method = RequestMethod.GET)
public String listEmployee(Model model) {
model.addAttribute("employee", new Employee());
model.addAttribute("user", getPrincipal());
model.addAttribute("listEmployee", employeeService.listEmployee());
return "employee";
}
@RequestMapping(value= "/employee/add", method = RequestMethod.POST)
public String addEmployee(@ModelAttribute("employee") Employee emp,Model model){
this.employeeService.addEditEmployee(emp);
model.addAttribute("user", getPrincipal());
return "redirect:/";
}
@RequestMapping("/delete/{id}")
public String removeEmployee(@PathVariable("id") int id,Model model){
this.employeeService.deleteEmployee(id);
model.addAttribute("user", getPrincipal());
return "redirect:/employees";
}
@RequestMapping("/edit/{id}")
public String editEmployee(@PathVariable("id") int id, Model model){
model.addAttribute("employee", employeeService.getEmployeeById(id));
model.addAttribute("listEmployees",employeeService.listEmployee());
model.addAttribute("user", getPrincipal());
return "employee";
}
das ist meine Feder Sicherheitskonfigurationsdatei
<security:global-method-security secured-annotations="enabled"/>
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/" access="hasRole('ADMIN')"/>
<!-- <security:intercept-url pattern="/employees" access="hasRole('ADMIN')"/> -->
<security:form-login login-page="/login" login-processing-url="/login"
default-target-url="/employees"
authentication-failure-url="/login" />
</security:http>
<security:authentication-manager >
<security:authentication-provider>
<security:jdbc-user-service authorities-by-username-query=""
users-by-username-query="select userName,password from user where userName=? AND password=?"
data-source-ref="dataSource"/>
</security:authentication-provider>
</security:authentication-manager>
Hier, was ich brauche, ist, wenn ich mich einmal anmelde, sollte ich alle Operationen ausführen. Ich brauche Sitzung zu erinnern, dass ich angemeldet war
Sie arbeiten an Spring Security, anstatt Spring Security zu verwenden. Lassen Sie Spring Security den Login-Prozess verwalten, anstatt Ihren eigenen zu schreiben. –
Was macht Ihr 'userService.login (user)? –
öffentliche Benutzeranmeldung (Benutzer Benutzer) { \t \t user = (Benutzer) session.getCurrentSession(). CreateCriteria (User.class) \t \t \t \t .add (Restrictions.eq ("username", user.getUserName())) \t \t \t \t .add (Restrictions.eq ("Passwort", user.getPassword())) \t \t \t \t .uniqueResult(); \t \t Benutzer zurückgeben; –