Was Sie tun müssen, ist Spring Safety-Konfiguration zu optimieren. Unten ein Beispiel mit XML-Konfiguration (ich bin viel mehr daran gewöhnt); es ist jedoch auch in JavaConfig machbar.
Grundsätzlich ist Frühling Sicherheit durch die
<http ....>
...
</http>
Element
gebrannt. Sie müssen es so schreiben (oder etwas Ähnliches)
<beans:bean id="authenticatedVoter" class="org.springframework.security.web.access.expression.WebExpressionVoter">
<beans:property name="expressionHandler" ref="..." />
</beans:bean>
<beans:bean id="roleVoter"
class="org.springframework.security.access.vote.RoleVoter">
<beans:property name="rolePrefix" value="" /> <!-- if you want to customize role prefix -->
</beans:bean>
<beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
<beans:constructor-arg>
<beans:list>
<beans:ref bean="roleVoter" />
<beans:ref bean="authenticatedVoter" />
</beans:list>
</beans:constructor-arg>
</beans:bean>
<!-- use-expressions enables the @PreAuthorize -->
<http use-expressions="true" access-decision-manager-ref="accessDecisionManager">
....
</http>
Beachten Sie die Bohnen hinzugefügt: Sie sind drei Spring-Komponenten.
Die erste enthält eine nicht spezifizierte Referenz. Er erwartet, dass SecurityExpressionHandler etwas Umsetzung: in Ihrem Fall Sie dann DefaultMethodSecurityExpressionHandler
bieten müssen werde, Ihre benutzerdefinierte Token Konfiguration hinzuzufügen, werden Sie einen Filter der eigenen und Draht in das HTTP
Element schreiben müssen. Sie können durch die Erweiterung Spring classes es ganz einfach tun und Anpassen dann sein Verhalten
public class MyClientAuthenticationFilter extends OncePerRequestFilter {
....
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
// custom logics here
// throw exception for not authenticated
}
}
und dann
<bean class="x.y.z.MyClientAuthenticationFilter" id="myClientAuthenticationFilter" />
<http ....>
<custom-filter ref="myClientAuthenticationFilter" before="BASIC_AUTH_FILTER" />
</http>
Sie sollten grundsätzlich erfolgen verdrahten.
Denken Sie daran, spring-security-aspects
in Ihrem Build: Spring Sicherheit @PreAuthorize
und andere Anmerkungen werden über AOP abgefangen, daher müssen Sie diese Aspekte in Ihrem Klassenpfad bereitstellen.
Denken Sie auch daran, dass dies nicht die vollständige Konfiguration ist: Es würde ein sehr lange Post, um alles zu verdrahten: Es ist nur ein Beispiel darüber, wie zu starten.
Weitere Informationen finden Sie in der Spring Security-Dokumentation.
Letzte Anmerkung: Wenn Sie JvaConfig anstelle von XML verwenden, sollte es Anmerkungen geben, die Sie von einem Teil dieser Konfiguration befreien können, aber vom benutzerdefinierten Filter.
Ich hoffe, es hilft.
Ich behandle eine benutzerdefinierte Token basierende Authentifizierung @RequestMapping (value = "login", method = RequestMethod.POST) public @ResponseBody Ergebnis Login (@RequestBody Credentials Berechtigungsnachweise) { return loginService.login (credentials.getUsername (), credentials.getPassword()); } –
bitte, anstatt die Konfiguration zu erklären, posten Sie es :-) Sie werden viel genauere Antwort haben, wenn Sie es tun. –
Danke @StefanoCazzola. Ich habe einige Änderungen vorgenommen und weitere Informationen hinzugefügt. –